下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、如何优化 sql 语句 .txt 心态决定状态,心胸决定格局,眼界决定境界。当你的眼泪忍不住要 流出来的时候,睁大眼睛,千万别眨眼,你会看到世界由清晰到模糊的全过程。 2010-01-18 honglove ( 高级程序员 )1、查询时不返回不需要的行、列 业务代码要根据实际情况尽量减少对表的访问行数,最小化结果集,在查询时,不要 过多地使用通配符如: select * from table1语句,要用到几列就选择几列,如: selectcol1,col2 from table1; 在 可 能 的 情 况 下 尽 量 限 制 结 果 集 行 数 如 : select top 100 col1,
2、col2,col3 from talbe2, 因为某些情况下用户是不需要那么多的数据的。2、合理使用 EXISTS, NOT EXISTS 字句如下所示:SELECT SUM(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 F
4、ROM hdr_tb1WHERE hdr_key NOT IN (SELECT hdr_key FROM dt1_tb1)三种写法都可以得到同样的结果集,但是效率是依次降低3、充分利用连接条件 在某种情况下,两个表之间可能不止一个的连接条件,这时在 where 字句中将谅解条 件完整的写上,有可能大大提高查询速度。例:a) 、 SELECTSUM(A.AMOUNTF) ROMACCOUNAT left jion CARDB on A.CARD_NO= B.CARD_NOb) 、 SELECTSUM(A.AMOUNTF) ROMACCOUNAT left jion CARDB on A.CARD
5、_NO= B.CARD_NO AND A.ACCOUNT_NO = B.ACCOUNT_NO第二句将比第一句执行快得多。4、WHERE字句中关系运算符的选择a) 、在关系运算中,尽量使用 = ,尽量不要使用 <>。b) 、WHER字句中尽量不要使用NOT运算符,如: NOT IN ,NOT EXISTS, NOT>、NOT<等等NOT运算符一般可以去除。如NOTSALARY>1OOOOK可以改为:salary<=100,如避免使用NOT IN, 可以使用 left outer jion 代替它。c) 、where字句中条件表达式间逻辑关系为AND时,将条件为
6、假的概率高的放在前面,概率相同、条件计算简单的放在前面。d) 、尽可能不要用 Order by 字句。使用 Order by 时,尽量减少列数、尽量减少排序 数据行数、 排序字段尽量是数字型 (尽量不要是字符型) 。 GROUPBY、 SELECTDITINCT、UNION 等字句,也经常导致 Order 运算。e) 、不要使用 Select count(*) 方式来判断记录是否存在, 建议使用 Select top 1 fromtable1 where 。f) 、不要使用 Group by 而没有聚合列。g) 、避免 Select 语句的 Where 字句条件用于假。如: where 1=0
7、;h) 、如果有多表连接时,应该有主从表之分,并尽量从一个表读取数,如selecta.col1,a.col2 from a jion b on a.col3=b.col4 where b.col5='a'.i) 、在 where 字句中,如果有多个过滤条件,应将所有列或过滤记录数量最多的条件 应该放在前面。二、使用 Truncate 清空表Trun cate会将表中记录全部清空,而不能有选择性的删除指定记录。而DELETE可以指定删除的记录。由于 Truncate 操作在 TransactionLog 中只记录被 Truncate 的页号,而 DELETE需要记载被删除记录的详
8、细内容,因此Truncate会比DELETE更迅速。对大数据表使用 Truncate ,效果更加明显。 Truncate Table 只会删除表中记录。而不会对表的索引和结构 造成影响。三、 Union 和 Union allUnion 将两个结果集合并后,会消除重复记录,而 Union all 不会消除重复记录,而 是直接将两个结果集直接合并。明确得知两个结果集中没有重复记录或者重复记录不影响使 用,建议使用 Union all 代替Un ion。因为Union在消除重复记录的过程中需要进行排序过 滤操作,对大结果集这种排序操作会非常影响性能。下面是Union 和 Union all 的简单性能比较:Unionselect * from table1 where code=' 01'Unionselect * from t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 延安中学化学练习题及参考答案
- 重庆靠谱二手数码商家买卖二手手机选哪家
- 北流小升初综合试题及答案
- 2026年信息安全意识提升手册习题
- 2026年餐饮服务与管理实操技能测试
- 2026年环境与健康知识测试卷
- 2026年幼儿科学实验操作与观察测试
- 2026年心理素质培养与提升策略习题集
- 2026年江西省部编版高一英语下册第6单元写作专项训练
- 2026年公共服务能力测评卷社区公共事务决策与执行模拟试卷
- 2026 年小学秋季新生开学“讲究卫生健康成长”
- 2026江苏省无锡市中考语文作文真题解读及范文
- 城市轨道交通站务员岗前能力评估考核试卷含答案
- 2026年辅警结构化面试经典题及答案
- 昆明市2025-2026学年数学三年级下学期期末综合测试试题(含答案解析)
- 工程监理工作重难点分析及其应对措施
- 医疗器械使用知情同意书范本
- 建设工程施工现场扬尘治理技术规范与实践指南
- 2026年房地产经纪人《房地产交易制度政策》考试真题(后附答案解析)
- 220kV线路挖孔桩施工方案
- 2026湖北武汉市华中师范大学校医院招聘9人考试备考题库及答案解析
评论
0/150
提交评论