当前位置:主页 > 学服务器 > win2003 >

MySQL--sql语句优化
栏目分类:win2003   发布日期:2018-06-25  来源:趣素材网 - www.pic83.com 浏览次数:

提示:本文转自「陶邦仁」的博客,他稍微做了整理。原始出处暂无找到,如有知晓的朋友,可留言告知。 :) 一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将

提示:本文转自「陶邦仁」的博客,他稍微做了整理。原始出处暂无找到,如有知晓的朋友,可留言告知。 :)

 

一、问题的提出

 

在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。

 

在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。

 

二、SQL语句编写注意问题

 

下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。

 

1. 操作符优化

 

(a) IN 操作符

 

用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:

 

ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。

 

推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。

 

(b) NOT IN操作符

 

此操作是强列不推荐使用的,因为它不能应用表的索引。

 

推荐方案:用NOT EXISTS 方案代替

 

(c) IS NULL 或IS NOT NULL操作(判断字段是否为空)

相关热词:

Copyright © 2010-2017 www.pic83.com. 趣素材网 版权所有 Power by DedeCms   粤ICP备12084032号-5  壁纸设计 | 酷站欣赏 | 绘画艺术 | 平面设计 | 交互设计 | 3D艺术 | 摄影艺术 |
原创作品 经验分享 设计素材 佳作欣赏 装饰设计 设计学院 学服务器 系统下载 电脑教程