Mysql性能优化之索引

  • Post author:
  • Post category:mysql



left join时可能会导致mysql不走索引的一些原因:


1.关联两张表字符集不一样会导致mysql不走索引;


2.select查询字段太多会导致不走索引;






聚族索引


索引的主要目的是为了加快查询的速度,索引一般使用b-tree结构实现,其索引列信息位于叶子节点上


且索引列只包含整列数据的位置,但并不包含此索引列相关的数据。聚族索引与其他索引不同,在他的



索引列上包含了此列的完整数据信息

,因此可以通过聚族索引直接找到对应的数据,而不需要再去通过


索引


信息去


磁盘寻找数据信息(这样会减少磁盘访问量)。




覆盖索引


覆盖索引就是根据聚族索引的优势,对查询的列建立一个覆盖的索引列信息,这样索引中就包含了要


查询的数据信息,这样也可以避免再去通过索引查找对应的完整数据列。


因此

可以通过覆盖所以优化查询速度

,但是又不宜对太多字段建立覆盖索引,此时有个折中方法,先查询


可以使用覆盖索引访问的列,然后对查询的数据join关联,从而查找出需要的完整信息。


— 如果通过覆盖索引从大量的数据中只返回少量的数据,这时通过join获取完整信息比直接查询完整信息效率高;


— 如果通过覆盖索引从大量的数据中返回大量的数据,这时与不使用覆盖索引没什么区别;


— 如果只有少量的数据,则直接查询会比较省时。




聚族索引和二级索引



mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes)。






以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引。如果表存在主键,该主键索引是聚集索引。如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚集索引。如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。



版权声明:本文为d_good原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。