22.索引的类型
单列索引:一个索引只包含单个列,但一个表中可以有多个单利索引
(普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复的值和空值,纯粹是为了查询效率更快一点。 唯一索引:索引列中的值必须是唯一的,但是允许为空值 主键索引:特殊的唯一索引,不允许有空值 主键约束就是一个主键索引)
组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引遵循最左前缀的集合。
全文索引:在大量数据中,通过其中的某个关键字,就能找到该字段所属的记录行。全文索引在开发中很少用,因为其占用很大的物理空间和降低了记录修改性。
- 主键索引是一种约束,唯一索引是一种索引,两者本质上是不同的
- 主键创建后一定包含一个唯一性索引,唯一索引不一定就是主键
- 唯一性索引列允许空值,而主键列不允许空值
- 主键可以被其他表引用为外键,而唯一索引不能)
25索引在什么情况下失效?
对查询进行优化,尽量避免全表扫描,避免导致索引失效
避免在where字句中使用!=,<>这样的符号,否则会导致引擎放弃索引儿产生全表扫描
避免在where字句中使用or来连接条件,因为俩个字段中有一个没有索引的话,引擎会放弃所以而全表扫描
避免在where字句中=的左边使用表达式操作或者函数操作
避免在where字句中使用Like模糊查询
索引优化的步骤是:
- 使用explain查看sql执行计划
- 判断哪些索引使用不当
- 优化sql,sql可能需要多次优化才能达到索引使用的最优值