php防止sql注入的函数 SQL语句性能优化.doc

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
php防止sql注入的函数 SQL语句性能优化 导读:就爱阅读网友为您分享以下“SQL语句性能优化”资讯,希望对您有所帮助,感谢您对92的支持! SQL语句性能优化 编码过程一些注意事项: 1、Oracle的From子句表的顺序:记录越多的表放在越前面(左); 右边的表位驱动表,驱动表越小,最终扫描的数据越少。 Oracle解析器按照从右向左的顺序处理From子句中的表名,最右的表将被最先处理。如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其它表所引用的表。 2、Oracle的where子句表达式的顺序:过滤掉最大数目记录的条件放到where子句的末尾。Oracle的执行计划的条件过滤从最后向前进行,过滤数据最多的在最后可以提高数据库的查询速度。 3、Select子句中避免使用*’,Oracle在解析的过程中会将*’一次转换成所有的列名,这个工作是通过查询数据字典完成的,这样将耗费更多的事件; 4、在执行结果等效的情况下,使用Truncate代替Delete; 当删除表中记录时,在通常情况下,回滚段用来存放可以被恢复的信息,如果没有 commit事务,oracle会将数据恢复到删除之前的状态。使用truncate时,回滚段不再存放任何可恢复的信息,数据不能被恢复。 5、为了在查询过程中要尽量使用索引,对于like语句避免使用右匹配或者中间匹配的模糊查询; 6、将过滤条件尽可能放到Where子句中,而不是放到Having子句中; Having子句是用来对分组后的结果进行过滤,限制分组后的查询结果。Having子句会再检索出所有记录之后才对结果集进行过滤,而且在使用Having子句时一般需要执行排序、统计等操作。执行这些操作时,SQL优化器会进行一些额外的工作,这就需要消耗额外的时间。 7、在SQL语句中,要减少对表的查询,特别是在含有子查询的SQL子句中; 8、使用表的别名可以减少解析的时间并避免引起歧义; 9、使用EXISTS替代IN,用NOT EXISTS替代NOT IN; 10、通常情况下,采用表连接的方式比exists更有效率; 11、当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换,EXISTS使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。例子: (低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D.DEPT_NO=E.DEPT_NO; (高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS(SELECT ‘X’ FROM EMP E WHERE E.DEPT_NO=D.DEPT_NO); 12、使用gt;=’替代gt;’,这样DBMS可直接跳到等于的记录上,可能会避免向前的扫描工作; 13、用union替代or,通常情况下, 用UNION替换WHERE子句中的OR时,将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引. 高效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 UNION SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE REGION = “MELBOURNE” 低效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE” 如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面. 14、避免在索引列上使用计算,如where语句中的表达式sal *12 gt; 2500应该改为 sal 〉 2500/12; 15、避免在索引列上使用IS NULL和IS NOT NULL工作,这样index将不被使用; 16、如果必要,使用函数索引,如对Upper(name)建立索引; 17、避免在索引列上使用Not,这样将执行全表扫描; 18、如果可能,用union-all替换union语句:当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序. 如果用UNION ALL替

文档评论(0)

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

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

1亿VIP精品文档

相关文档