性能优化之 索引
优点
- 分组、排序操作
 - 加速表与表之间的连接
 
分类
普通索引
- 允许重复值和空值
 
唯一索引
- 必须唯一,允许空值
 - 组合索引,则列值的组合必须唯一
 
主键索引
- 不允许值重复或者值为空
 
空间索引
- 空间数据类型的字段建立的索引
 
全文索引
- 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 国际许可协议 进行许可。转载请注明出处!