网站大量收购独家精品文档,联系QQ:2885784924
  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL语句书写注意事项 6、复合索引的使用限制 create index Inx_mwi_receiver on mv_workitem(receiver_id, receiver); 索引Inx_mwi_receiver为复合索引,对mv_workitem表的receiver_id与receiver列进行索引,其中receiver_id列为此复合索引的引导列如果查询时条件中没有附带引导列进行查询则该索引失效,如 select mv_workitem where receiver_id = 1213; select mv_workitem where receiver = 张三; select mv_workitem where receiver_id = 1213 and receiver = 张三; 上述三条语句中第一与第三条语句能用到索引,而第二条语句无法使用索引。 SQL语句书写注意事项 7、使用exists替代in操作符 elect num from a where num in(select num from b) 与: select num from a where exists(select 1 from b where num=a.num) 两条语句产生相同的结果,但是后者的效率显然要高于前者。因为后者不会产生大量锁定的表扫描或是索引扫描。 SQL语句书写注意事项 8、避免使用不一致的数据类型进行查询 如: select * from t_cm_info_inst a where a.infoid=1213; select * from t_cm_info_inst a where a.infoid=‘1213’; t_cm_info_inst表中的infoid为字符类型,此两条语句运行的结果相同,但是第一条语句会是数据库引擎做全表扫描,而第二条语句则会用到infoid列的索引。 SQL语句书写注意事项 9、使用列名而不是*进行表查询 如: select * from t_cm_info_inst; select infoid,infotitle,.... from t_cm_info_inst; 此两条语句查询时第二条语句的性能高于第一条语句的性能,因为第一条语句数据引擎在解析时会从字典表中将t_cm_info_inst表的列名全部找出来后改写为第二条语句再运算结果集,这个过程是有性能消耗的。 在程序中用到多少列就查询多少列,而不是没有选择性的使用*进行语句查询。 SQL语句书写注意事项 10、能用UNION ALL就不要用UNION 如: select * from mv_workitem a where a.receiver_id = 1213 union all select * from mv_workitem a where a.receiver_id = 1214 与 select * from mv_workitem a where a.receiver_id = 1213 union select * from mv_workitem a where a.receiver_id = 1214 上述两条语句得到的结果集一致,但是第二条语句的效率高于第一条语句,因为UNION操作符会有一个重复值判断的过程,而UNION ALL操作符连接两个语句查询出来的所有结果集 SQL语句书写注意事项 11、灵活运用视图 把表的一个子集进行排序并创建视图,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。 视图是预编译的,每一条语句在运行时数据库引擎都会对语句进行解析编译后存放在内存中,如果将一些复杂的语句做成视图则减少了编译语句的过程,能加快sql语句运行速度。 3.基于数据库的SQL优化 1.SQL语句书写注意事项 2.基于程序的SQL优化 基于程序的SQL优化 1、不要在循环中作sql语句查询操作,最好能一次将需要的数据查询出来后再用循环进行比对。 2、能一次查询出结果集就不要分开成多个语句进行查询,因为java每执行一次sql语句包括打开连接,执行语句,获取结果集,关闭连接等等一系列操作,这些操作都是需要消耗性能的。 3、对于大表可以在程序中作分表操作。 如log_table表我们可以根据日志产生的年度将日志存放到不同的表中,2010年的记录可以放到 log_table_2010表中,2011年产

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档