如何优化sql语句.docx

上传人:苏美尔 文档编号:6305404 上传时间:2020-10-23 格式:DOCX 页数:4 大小:69.59KB
返回 下载 相关 举报
如何优化sql语句.docx_第1页
第1页 / 共4页
如何优化sql语句.docx_第2页
第2页 / 共4页
如何优化sql语句.docx_第3页
第3页 / 共4页
如何优化sql语句.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《如何优化sql语句.docx》由会员分享,可在线阅读,更多相关《如何优化sql语句.docx(4页珍藏版)》请在三一文库上搜索。

1、2010-01-18如何优化 sql 语句 .txt 心态决定状态,心胸决定格局,眼界决定境界。当你的眼泪忍不住要流出来的时候,睁大眼睛,千万别眨眼,你会看到世界由清晰到模糊的全过程。 honglove ( 高级程序员 )1、查询时不返回不需要的行、列业务代码要根据实际情况尽量减少对表的访问行数,最小化结果集,在查询时,不要过多地使用通配符如:select * from table1语句,要用到几列就选择几列,如:selectcol1,col2fromtable1;在 可 能 的 情 况 下 尽 量 限 制 结 果 集 行 数 如 : selecttop100col1,col2,col3 fr

2、om talbe2,因为某些情况下用户是不需要那么多的数据的。2、合理使用EXISTS, NOT EXISTS 字句如下所示:SELECTSUM(T1.C1) FROMT1 WHERE(SELECT COUNT(*) FROMT2 WHERET2.C2=T1.C2)0)SELECT SUM(T1.C1) FROM T1 WHERE EXISTS(SELECT * FROM T2 WHERE T2.C2=T1.C2)两种产生相同的结果, 但是后者的效率显然要高过于前者。 银行后者不会产生大量锁定的表扫描或是索引扫描。经常需要些一个 T_SQLL语句比较一个父结果集和子结果集,从而找到是否存在在父

3、结果集中有而在子结果集中乜嘢的记录,如:SELECT _a.hdr_key FROM hdr_tb1 a-tb1 a表示 tb1 用别名 a 代替WHERE NOT EXISTS (SELECT * FROM dt1_tb1 b WHERE a.hdr_key = b.hdr_key)SELECT _a.hdr_key FROM hdr_tb1 a-tb1 a表示 tb1 用别名 a 代替LEFT JION dt1_tb1 b ON a.hdr_key = b.hdr_key WHERE b.hdr_key IS NULLSELECT hdr_key FROM hdr_tb11WHERE hd

4、r_key NOT IN (SELECT hdr_key FROM dt1_tb1)三种写法都可以得到同 的 果集,但是效率是依次降低3、充分利用 接条件在某种情况下,两个表之 可能不止一个的 接条件, 在 where 字句中将 解条件完整的写上,有可能大大提高 速度。例:a)、 SELECTSUM(A.AMOUNT)FROMACCOUNT leftjionCARDB on A.CARD_NO= B.CARD_NOb) 、 SELECTSUM(A.AMOUNT)FROMACCOUNT left jion CARDB on A.CARD_NO= B.CARD_NO AND A.ACCOUNT_N

5、O = B.ACCOUNT_NO第二句将比第一句 行快得多。4、 WHERE字句中关系运算符的 a) 、在关系运算中,尽量使用 =,尽量不要使用 。b) 、 WHERE字句中尽量不要使用 NOT运算符,如: NOT IN ,NOT EXISTS, NOT 、 NOT10000K 可以改 : salary=100, 如避免使用NOT IN, 可以使用left outer jion代替它。c) 、where 字句中条件表达式 关系 AND ,将条件 假的概率高的放在前面,概率相同、条件 算 的放在前面。d)、尽可能不要用Order by字句。使用Order by ,尽量减少列数、尽量减少排序数据行

6、数、 排序字段尽量是数字型 (尽量不要是字符型) 。GROUPBY、 SELECT DITINCT、UNION等字句,也 常 致 Order 运算。e) 、不要使用 Select count(*) 方式来判断 是否存在, 建 使用 Select top 1 fromtable1 where。f) 、不要使用 Group by 而没有聚合列。g)、避免 Select 句的 Where 字句条件用于假。如:where 1=0;h)、如果有多表 接 , 有主从表之分,并尽量从一个表 取数,如selecta.col1,a.col2 from a jion b on a.col3=b.col4 wher

7、e b.col5= a .2i) 、在 where 字句中,如果有多个过滤条件,应将所有列或过滤记录数量最多的条件应该放在前面。二、使用Truncate清空表Truncate会将表中记录全部清空,而不能有选择性的删除指定记录。而DELETE可以指定删除的记录。由于Truncate操作在TransactionLog中只记录被Truncate的页号,而DELETE需要记载被删除记录的详细内容,因此 Truncate会比 DELETE更迅速。 对大数据表使用 Truncate ,效果更加明显。 Truncate Table 只会删除表中记录。而不会对表的索引和结构造成影响。三、 Union 和 Un

8、ion allUnion将两个结果集合并后,会消除重复记录,而Union all不会消除重复记录,而是直接将两个结果集直接合并。明确得知两个结果集中没有重复记录或者重复记录不影响使用,建议使用Union all代替 Union 。因为 Union 在消除重复记录的过程中需要进行排序过滤操作,对大结果集这种排序操作会非常影响性能。下面是Union和 Union all的简单性能比较:-Unionselect * from table1 where code= 01Unionselect * from table1 where code= 02-Union allselect * from table1 where code= 01union allselect * from talbe1 where code= 023

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1