mysql索引

索引的作用:
mysql索引在B树中存储。字符串是自动地压缩前缀和结尾空间。
索引用于:
        快速找出匹配一个WHERE子句的行
        在多个表的查询时,执行连接时加快了与其他表中的行匹配的行的搜索
        如果排序或分组在一个可用索引的最左面前缀上进行,排序或分组一个表。如果所有键值部份跟随DESC,键以倒序被读取
        在某些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来
 
索引的弊端:
        索引文件占磁盘空间,如果有大量的索引,索引文件可能会比数据文件更快地到达最大的文件尺寸。
        索引文件加快了检索,但增加了插入和删除,以及更新索引列中的值的时间,因为写操作不仅涉及数据行,而且还会涉及索引。一个表拥有的索引越多,则写操作的平均性能下降就越大
 
多列索引:
  如果如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行
  如果一个表有一个多列索引,任何最左面的索引前缀被优化器使用以找出行;如果列不构成索引的最左面前缀,mysql不能使用一个部分的索引
  如果LIKE参数是不以一个通配符起始的一个常数字符串,mysql也为LIKE比较使用索引
  如果column_name是一个索引,使用column_name IS NULL的搜索将会使用索引
  mysql通常使用找出最少数量的行的索引。一个索引被用于与下列操作符比较的列:=、>、>=、<=、<、BETWEEN和一个 有一个非通配符前缀的列‘param%’的LIKE的列
对于一个多列索引,如果在WHERE子句的所有AND层次使用索引,将不使用索引优化查询。为了能偶使用索引优化查询,必须把一个多列索引的前缀使用在一个AND条件组中
 
 
原文地址:https://www.cnblogs.com/gqymy/p/11650647.html