MySQL 索引

几乎所有的索引都是建立在字段之上.

索引: 系统根据某种算法, 将已有的数据(未来可能新增的数据),单独建立一个文件: 文件能够实现快速的匹配数据, 并且能够快速的找到对应表中的记录. 

索引的意义

  1. 提升查询数据的效率

  2. 约束数据的有效性(唯一性等)

增加索引的前提条件: 索引本身会产生索引文件(有时候有可能比数据文件还大) ,会非常耗费磁盘空间.

如果某个字段需要作为查询的条件经常使用, 那么可以使用索引(一定会想办法增加);

如果某个字段需要进行数据的有效性约束, 也可能使用索引(主键,唯一键)

 

Mysql中提供了多种索引

  1. 主键索引: primary key

  2. 唯一索引: unique key

  3. 全文索引: fulltext index

  4. 普通索引: index

  5. 外键索引: foreign key

  6. 复合索引:key (最左前缀原则)

 

全文索引: 针对文章内部的关键字进行索引

全文索引最大的问题: 在于如何确定关键字

英文很容易: 英文单词与单词之间有空格

中文很难: 没有空格, 而且中文可以各种随意组合(分词: sphinx)

 

什么情况下有索引,但用不上

  1. 条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

  2. 对于多列索引,第一个索引没有使用,则不会使用索引。例如索引是key index (a,b,c). 可以是a | a,b| a,b,c 3种组合进行查找,但使用b,c不会使用索引。

  3. like查询是以%或 _开头不会使用,% 或 _可以放在后面。

  4. 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

  5. where 子句里对索引列上有数学运算,用不上索引。

  6. where 子句里对有索引列使用函数,用不上索引。

  7. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

  8. 避免在索引字段上使用函数,否则会导致查询时索引失效。
 
相关文章:  
原文地址:https://www.cnblogs.com/xuey/p/13052462.html