Mysql查询优化

来源:互联网 发布:泰尔指数公式及其算法 编辑:程序博客网 时间:2024/06/01 09:50

近日帮舍友做一个数据的处理任务,里面需要对比较大的数据表进行查询操作。一开始查询的时间比较长,经过了一些查询,对查询进行了一些优化操作,下面总结下一般的查询优化。

1、对表加索引,主要是对SQL中作为条件的字段进行加索引。
例如:SQL为

SELECT c.nid,c.nvalue FROM (SELECT a.nid,a.nvalue,(@rowno:=@rowno+1) AS rowno FROM (SELECT * FROM tab_test WHERE nid=58238) a,(SELECT (@rowno:=0)) b WHERE a.nmonth=1 AND a.nday BETWEEN 1 AND 10 ORDER BY a.nvalue DESC) c WHERE rowno=16

查询时间较长,通过对tab_test表的nid字段添加索引,可以将查询时间缩短1/3左右。添加索引啥SQL如下:

ALTER TABLE tab_test ADD INDEX idx_test (nid)

2、在SQL中不要出现select * 的情况,将*替换为对应的字段,不要出现任何多余的字段查询。

3、尽量在where条件中不要使用or条件,否则引擎将放弃索引而进行全表扫描。比如:

select id from tab_name where num=1 or num=2

可以改写为:

select id from tab_name where num=1union allselect id from tab_name where num=2

4、使用exists代替in比较好

5、where条件中不要出现计算,或者是not null判断。