索引类型:
一个表只能有一个主键索引,可以有多个唯一索引。
主键索引一定是唯一索引,唯一索引不是主键索引。
主键可以和外键构成参照完整性的约束,防止数据不一致。
索引的类型:
1.组合索引:将多个列组合在一起创造索引,可以覆盖多个列
2.外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性,完整性和实现级联操作。
3.全文索引:Mysql自带的全文索引只能用于MyISAM,并且只能对英文进行全文检索。
创建索引的原则:
1.最适合索引的列是出现在where子句中的列,或连接子句中的列而不是出现在select关键字后的列。
2.索引列的基数越大,索引的效果越好。
3.对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间。
4.根据情况创建复合索引,复合索引可以提高查询效率。
5.避免创建过多索引,索引会额外占用磁盘空间,降低写操作效率。
6.主键尽可能选择较短的数据类型,可以有效减少索引的磁盘占用提高查询效率。
复合索引前缀原则
KEY(a,b,c)
(以下三个可以)
WHERE a=1 and b=2 and c=3
WHERE a=1 and b=2
WHERE a=1
(因为跳过a或者b导致用不了联合索引)
WHERE b=2 and c=3
WHERE a=1 and c=3
like查询,%不能在前,可以使用全文索引
column is null 可以使用索引
如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引。
比如:where id>1 and id<100
MySQL索引的注意事项:
1.如果or前的条件中的列有索引,后面的没有,索引都不会被用到:a or b,发现b没索引,你就用不到
2.列类型是字符串,查询时一定要给值加引号,否则索引失效。