mysql优化

147 阅读2分钟

1、EXPLAIN查看SQL执行计划

EXPLAIN SELECT * FROM `user` WHERE `open_id` = 'oBOE3455PH4Xj2Hf_8pwa0wG2d4M'
没有设置索引的情况

设置open_id为UNIQUE索引

type:
key:显示MySQL实际决定使用的键(索引) key_len:显示MySQL决定使用的键长度 ref:显示使用哪个列或常数与key一起从表中选择行。 rows:显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。 Extra:
2、SQL语句中IN包含的值不应过多

MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比
较大的。再例如:select id from t where num in(1,2,3) 对于连续的数值,能用between就不要用in了;再或者使用连接来替换

3、SELECT语句务必指明字段名称

SELECT*增加很多不必要的消耗(CPU、IO、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前断也需要更新。所以
要求直接在select后面接上字段名。

4、当只需要一条数据的时候,使用limit 1

这是为了使EXPLAIN中type列达到const类型

5、如果排序字段没有用到索引,就尽量少排序 6、使用合理的分页方式以提高分页的效率

select id,name from product limit 866613, 20
使用上述SQL语句做分页的时候,可能有人会发现,随着表数据量的增加,直接使用limit分页查询会越来越慢。
优化的方法如下:可以取前一页的最大行数的id,然后根据这个最大的id来限制下一页的起点。比如此列中,上一页最大的id是866612。SQL可以采用如下的写法:
select id,name from product where id> 866612 limit 20