sql查询优化

来源:互联网 发布:python bytes函数 编辑:程序博客网 时间:2024/06/18 03:27

浅析sql查询优化

开门见山,结合笔者工作中处理过的问题,以及前人的经验,总结几点有关sql查询优化时的注意问题。不完善之处还望多多指正。

一、 避免全表扫描
全表扫描往往是由索引失效造成,那么什么情况下会造成索引失效?
where字句中对字段进行运算或函数操作,where多子句的先后顺序(mysql自左向右来执行where字句)。n!=,<>, in, not in, or ,like 的使用,null 值判断。
当处理这些问题的时候,能避免以上用法,尽量避免。当然不是说要舍近求远,具体问题具体分析,视查询效率而定。

二、用什么取什么
多余的数据一个也不取,避免使用select * ,合理运用limit。

三、合理利用存储空间
能使用数字类型就不用字符类型,(引擎在处理查询和连接时会逐个比较字符串中每一个字符,而数字型只需比较一次);char和varchar,通常情况用varchar(char存储效率不如varchar,对于短数据的查询优于varchar。存储很短的信息、存储固定长度、频繁改变的column时,这三种情况宜用char)

四、重复运用的数据采用临时表
临时表慎用,适当使用可以使某些例程更有效,如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于单次事件,最好使用导出表

五、日志产生
查询时产生的日志也会降低效率。创建临时表时,若一次性插入大量数据,那么可以通过 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

以上主要从sql方面考虑,提高查询效率还可以通过 将数据、日志、索引放到不同的I/O设备上,增加读取速度。数据量(尺寸)越大,提高I/O越重要。对数据表进行分割,减少表的尺寸。升级硬件,提高网速等。