性能优化之 索引
优点
- 分组、排序操作
- 加速表与表之间的连接
分类
普通索引
- 允许重复值和空值
唯一索引
- 必须唯一,允许空值
- 组合索引,则列值的组合必须唯一
主键索引
- 不允许值重复或者值为空
空间索引
- 空间数据类型的字段建立的索引
全文索引
- CHAR、VARCHAR 或 TEXT 类型的列上创建
- 只有 MyISAM 存储引擎支持全文索引
位图索引
- “select * from table where Gender=‘男’ and Marital=“未婚”;”
首先取出男向量10100…,然后取出未婚向量00100…,
将两个向量做and操作,这时生成新向量0010
- “select * from table where Gender=‘男’ and Marital=“未婚”;”
B与B+
- B:树内的每个节点都存储数据;叶子节点之间无指针连接
- B+:数据只出现在叶子节点;所有叶子节点增加了一个链指针
聚集索引、非聚集索引
- 区别
- 聚集:行中数据的物理顺序与键值的逻辑(索引)顺序相同
- 非聚集索引叶子节点上存储了索引字段自身值和主键索引
- 聚集相关
- 聚簇索引默认就是主键索引;第一个唯一非空索引被作为聚集索引;内部会生成一个隐藏的主键
- uuid作为主键,写入性能低了
- 非聚集
- 索引不能随意增加。在做写库操作的时候,需要同时维护这几颗树的变化,导致效率降低
- 回表或者二次查询
- 使用聚集索引查询可以直接定位到记录,而普通索引通常需要扫描两遍索引树
- 解决
- 联合索引
- 区别
联合索引
- 最左匹配
查询失效
- 条件
- 最左
- OR条件中的每个列都加上索引
- not in
- 前置通配符
- is null
- 函数
- where age-1=17
- 内置函数,索引失效
- 条件
本文作者:
yuqing wang
本文链接: https://satyrswang.github.io/2021/04/05/mysql索引/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://satyrswang.github.io/2021/04/05/mysql索引/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!