码迷,mamicode.com
首页 > 数据库 > 详细

MySQL优化(二) 优化诀窍

时间:2018-11-27 01:38:52      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:关闭   估计   比较   use   简单   导入   auto   临时表   使用   

索引的使用

(1)查询要使用索引最重要的条件是查询条件中的字段建立了索引;

(2)下列几种情况可能使用到索引:

  <1> 对于创建的多列索引,只要查询条件使用了最坐边的列,索引一般就会被使用;

  <2> 对于使用 like 的查询,查询如果是 “%aaa” 则不会使用到索引;如果是“aaa%”,则会使用到索引;

(3)下列的表将不会使用索引:

  <1> 如果条件中有 OR,即使其中有条件的列建立了索引,也不会被使用;换而言之,就是所有使用的字段都要建立索引;尽量避免使用OR,效率比较低;

  <2> 对于多列索引,不是使用的第一部分,则不会使用索引;

  <3> like 查询以 “%” 开头;

  <4> 如果列类型是字符串,那一定要在条件中将数据使用引号引起来,否则不使用索引;也就是列是字符串类型,就一定要

  <5> 如果 MySql 估计使用全表扫描要比使用索引快,则不使用索引;

(4)查看索引的使用情况

  Show status like ‘Handler_read%‘

  Handler_read_key:这个值越高越好,表示使用索引查询使用的次数;

  Handler_read_rnd_next:这个值越高,说明查询越低效;

(5)大批量插入数据(了解)

  <1> 对于MyISAM:

    alter table table_name disable keys;  关闭表的索引;如果在导入数据的时候不关闭就会一直在建立索引文件,使导入时间过长;导入完成之后再开启表的索引就好了;

    alter table table_name enable keys;  开启表的索引

  <2> 对于 Innodb:

    将导入的数据按照主键排序;

    set unique_checks = 0,关闭唯一性校验,否则每条数据都会检查;

    set autocommit = 0,关闭自动提交;

(6)SQL语句优化的技巧

  <1> 优化 Group by 语句

    MySql 对所有的 group by col1, col2 进行分组查询时,默认分组之后,然后进行排序,可能会降低查询速度;

    如果在查询中使用 group by ,但是用户想要避免排序造成的消耗,可以使用 order by null 来禁止排序;

    即:select * from user group by age order by null;

  <2> 有些情况下,可以使用连接来代替子查询。因为使用 join ,MySql不需要再内存中创建临时表。

    select * from dept,employ where dept.deptno = employ.deptno; [简单方式]

    select * from dept left join employ on dept.deptno = employ.deptno;  [左连外接,更好]

 

 

 

  

     

MySQL优化(二) 优化诀窍

标签:关闭   估计   比较   use   简单   导入   auto   临时表   使用   

原文地址:https://www.cnblogs.com/yufeng218/p/10023852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!