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