一、大批量插入数据

1.大批量数据插入空表,可将表设置成为MyISAM,并通过disable keys将唯一索引关闭

2.大批量数据插入非空Innodb表,可采取如下措施提高效率:

     [1]导入数据时按照主键顺序排列;

     [2]导入数据前使用set UNIQUE_CHECKS=0,关闭唯一性校验,导入后恢复;

     [3]如果使用了自动提交,建议在导入前执行SET AUTOCOMMIT=0,关闭自动提交,导入后恢复

 

二、优化INSERT语句

1.尽量使用多个值表的insert语句,降低连接、关闭的消耗;

2.将索引文件和数据文件分在不同的磁盘上存放;

3.从一个文本文件装入一个表时,使用LOAD DATA INFLIE ,比一般的insert语句快20倍; 

 

三、查询优化

1.尽量减少额外的排序,通过索引直接返回有序数据;where条件和order by使用相同的索引,并且order by的顺序与索引顺序相同,并且order by的字段都是升序或者都是降序;

2.尽量只选择必要的字段,提高sql性能;

3.能用关联查询的不要用子查询;

4.对于包含or的查询语句,如果要利用索引,则or之间的每个条件都必须用到索引,否则应该考虑增加索引;

5.优化分页

    [1]在索引上完成排序分页的操作,然后根据主键关联回原表查询所需的其他列

    [2]把limit查询转换为某个位置的查询;

 

四、 注意不使用索引的情况

  1. 如果MySQL估计使用索引比全表扫描更慢,则不使用索引
  2. 用or分隔开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及到的索引都不会被用到;
  3. 复合索引,如果索引列不是复合索引的第一部分,则不使用索引(即不符合最左前缀);
  4. 如果like是以’%’开始的,则该列上的索引不会被使用
  5. 如果列为字符串,则where条件中必须将字符常量值加引号,否则即使该列上存在索引,也不会被使用;
  6. not in 、 not exists 、 (<> 不等于 !=)这些操作符不走索引
  7. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引;