据库优化

数据库优化

1,使用 explain,查看SQL的执行计划
杜绝出现all查询
2,SQL中in包含的值不应该过多
能用between 尽量不用 in
3,查询务必要指明字段,避免不必要的资源浪费
4,查询只需要一条的 使用 limit 1
5,排序字段必须加索引。
6,如果限制条件中,其他字段没有索引,尽量避免使用 or查询
很多时候,
7,使用 union all代替 union
一个是过滤前排序,一个是过滤后排序
8,不适用 order by rand();
替换
select id form dynamic order by rand() limit 1000
优化后
select id from dynamic t1 join (select rand() *(select max(id) from dynamic) as nid) t2 on t2.id<t1.id limit 1000;
9,使用合理的分页方式效率会快一点
比如大于100页后,使用最小的ID从1开始。
10,分段查询
11,避免在 where 子句中对字段进行 null值判断,对null值判断,会导致引擎放弃使用索引而采用全表扫描
12,不建议使用 %前缀模糊查询,但可以使用 name%
创建全文索引的sql语法是:
ALTER TABLE dynamic_201606 ADD FULLTEXT INDEX idx_user_name (user_name);
十六、遵守最左前缀法则,对于联合索引来说,要遵守最左前缀法则
举列来说索引含有字段id,name,school,可以直接用id字段,也可以id,name这样的顺序,但是name;school都无法使用这个索引。所以在创建联合索引的时候一定要注意索引字段顺序,常用的查询字段放在最前面
十七、必要时可以使用force index来强制查询走某个索引
有的时候MySQL优化器采取它认为合适的索引来检索sql语句,但是可能它所采用的索引并不是我们想要的。这时就可以采用force index来强制优化器使用我们制定的索引。
十八、注意范围查询语句,between and 后面的字段索引会失效
对于联合索引来说,如果存在范围查询,比如between,>,<等条件时,会造成后面的索引字段失效。
十九、关于JOIN优化
LEFT JOIN A表为驱动表
INNER JOIN MySQL会自动找出那个数据少的表作用驱动表
RIGHT JOIN B表为驱动表
注意:MySQL中没有full join,可以用以下方式来解决
select * from A left join B on B.name = A.name where B.name is null union all select * from B;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章