MySQL操作的一些优化

  1.用于不要使用select * from table xxx。

   需要查询哪些列就在语句中指明,一个表结构复杂时,可能会有上百列,使用*来查询时会造成很大的浪费。

  2.选择合适的属性及大小

     例如邮政编码使用char(6)就要比varchar(255)合适的多,省份、性别定义为enum也会提高效率。

       3.使用join来代替子查询

   原因是MySQL将不用创建临时表来完成2步操作。

   select  name,age from a where id not in (select id from b);可以用下面的语句代替:

     select name,age from a left join b on a.id = b.id where b.id is null;

       4.有索引的字段不要使用函数,会使索引失效

   select id,times from count where total /7<24;应该改为:

     select id,times from count where total<24*7;

  5.使用explain来判断语句的效率

  6.最左原则,(a,b)做联合索引时,where a = ?时会使用索引,where b = ?时不会使用索引。

     (a,b,c)做联合索引时,where a = ?and b = ?时会使用索引,where b = ?and c = ?时不会使用索引。

  7.使用like时,开头不要使用%,否则索引会失效。应该使用like ‘abc%’而避免like ‘%abc%’。

  8.MySQL的一些操作将会产生临时表,这些操作应该避免:

   1>group by一个无索引的列,就会产生临时表

     使用join时,group by任何列都会产生临时表,order by也是一样的

   2>distinct非索引列会产生临时表

      3>可以使用explain查看extra字段,如果是filesort就说明使用了临时表。说明MySQL已经无法通过索引来排序,需要额外的空间来排序。

  9.向一张表插入若干条数据:

     insert into table(column1,column2,column3) values(1,1,1),(2,2,2),...(n,n,n);

  10.很多的语句一次执行,批处理,减少建立连接的次数

原文地址:https://www.cnblogs.com/lnlvinso/p/4356579.html