设计索引的原则

 提示:转载请注明原文链接

 本文链接:https://360us.net/article/27.html

1、搜索的索引列,不一定是要选择的列。

换句话说,最适合索引的列是出现在WHERE字句中的列,或连接字句中指定的列,而不是出现在SELECT关键字后选择列表中的列。


2、使用唯一索引。

考虑某列中值得分布,索引的列的基数越大,索引的效果越好。例如,存放出生日期的列具有不同的值,很容易区分各行。而用来记录性别的列,只有“M”和“F”,则对此列进行索引没有多大用处,因为不管搜游那个值,都会得出大约一半的行。


3、使用短索引。

如果对字符串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。


4、利用最左前缀。

在创建一个n列的索引时,实际是创建了MySQL可利用的n个索引,多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行,这样的列集成为最左前缀。


5、不要过度索引。


6、对于InnoDB存储引擎的表,记录默认会按照一定的顺序保存,如果有明确定义的主键,则按照主键顺序保存。如果没有主键,但是有唯一索引,那么就是按照唯一索引的顺序保存。如果既没有主键又没有索引,那么表中会自动生成一个内部列,按照这个列保存。按照主键或者内部列访问时最快的,所以InnoDB表尽量自己指定主键,当表中同时有几个列都是唯一的,都可以作为主键的时候要选择最常作为访问条件的列作为主键,提高查询效率。另外,InnoDB表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型。


BTREE索引和HASH索引

HASH索引有些重要特征需要在使用的时候特别注意:

1、只用于食用=或<=>(严格比较两个NULL值是否相等)操作符的等式比较。

2、优化器不能使用HASH索引来加速ORDER BY操作。

3、MySQL不能确定在两个值之间大约有多少行。如果一个MyISAM表改为HASH索引的MEMORY表,会影响一些查询的执行效率。

4、只能使用整个关键字来搜索一行。


对于BTREE索引,当使用>、<、>=、<=、BETWEEN、!=或者<>,或者LIKE ‘pattern’(pattern不以通配符开始)操作时,都可以使用相关列上的索引。


本来链接:https://360us.net/article/27.html