mysql优化

若表中有一个联合索引(c1,c2,c3,c4),则表示c2在c1下是有序的,c3在c2下是有序的,c4在c3下是有序的。若c2断了(没有使用上索引)则c3,c4不会再有作用,其他同理

想分组就必须有序,若无序则会创建临时表并进行数据排序,有序则不会创建临时表。

mysql的引擎innodb和myisam的区别(myisam不支持事物):

 

因为在innodb中数据量过大,id下面挂载的数据会形成数据块,查找效率会变慢;又因为只查找id,所以只会在复合索引(id,ver)中查找,速度更快。

若engine是myisam,则效率差不多。

 

分页优化:

select .. from xx limit (pageNo-1)*pageSize,pageSize

若是 10000 10010,则会先查出10010条数据再过滤出后面的10条数据,效率很差。

优化 1.从业务上优化,比如只允许查找10页的数据

   2.从代码上,在删除数据时设置一个标记字段is_delete为1,不要真的删除数据,这样可以利用主键索引

   select .. from xx where id > (pageNo-1)*pageSize limit 10;

   若真要删除数据则可以使用延迟索引

  延迟索引:使用索引查询出来数据,之后把查询结果和同一张表中数据进行连接查询,进而提高查询速度!分页是一个很常见功能

  select c.id,c.name from xx as c inner join

         (select id from xx limit 10000,10) as t on t.id=c.id;

  

  in和exists的效率不高

  

 null的特殊性:列 name is null,name is not null

索引:key(普通索引),unique key(唯一索引),primary key(主键索引),fulltext(全文索引)

 

posted on 2016-12-19 16:17  james-roger  阅读(88)  评论(0编辑  收藏  举报