索引分类:
主键索引:
主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。
唯一索引:
索引列的所有值都只能出现一次,即必须唯一,值可以为空。
普通索引 :
基本的索引类型,值可以为空,没有唯一性的限制。
全文索引:
全文索引的索引类型为FULLTEXT。
全文索引可以在varchar、char、text类型的列上创建。
可以通过ALTER TABLE或CREATE INDEX命令创建。
对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。
MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。
全文索引不支持中文需要借sphinx(coreseek)或迅搜<、code>技术处理中文。
联合索引的最左原则
# 使用组合索引的原因
-- 效率高,减少查询开销,索引列越多,通过索引筛选出的数据越少
-- 覆盖索引,MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操
# 最左匹配原则
最左优先,在创建组合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。复合索引很重要的问题是如何安排列的顺序,比如where后面用到c1, c2 这两个字段,那么索引的顺序是(c1,c2)还是(c2,c1)呢,正确的做法是,重复值越少的越放前面,比如一个列 95%的值都不重复,那么一般可以将这个列放最前面。另外,复合索引的字段数尽量不要超过 3个,一旦超过,要慎重考虑必要性。
索引失效的情况
1、like查询以“%”开头;
2、or语句前后没有同时使用索引;
3、组合索引中不是使用第一列索引;
4、在索引列上使用“IS NULL”或“IS NOT NULL”操作;
5、在索引字段上使用“not”,“<>”,“!=”
6、联合索引中有null值的列
7、联合索引没有用最左原则
8、查询语句中有类型转换
9、where条件查询中的索引列有函数或运算存在
10、如果内部任务全表扫描快过 索引检索, 索引失效
# 怎么查看sql语句是否 使用了索引查询
explain 关键字来查看