Emove

  • 首页
  • 归档
  • 分类
  • 标签

  • 搜索
context 反射 channel LRU BeanDefinition JVM 装饰者模式 MyBatis 快慢指针 归并排序 链表 hash表 栈 回溯 贪心 主从复制 二分查找 双指针 动态规划 AOF RDB 规范 BASE理论 CAP B树 RocketMQ Sentinel Ribbon Eureka 命令模式 访问者模式 迭代器模式 中介者模式 备忘录模式 解释器模式 状态模式 策略模式 职责链模式 模板方法模式 代理模式 享元模式 桥接模式 外观模式 组合模式 适配器模式 建造者模式 原型模式 工场模式 单例 UML 锁 事务 sql 索引

索引规范

发表于 2020-04-06 | 分类于 MySQL | 0 | 阅读次数 142

索引设计规范

  1. 主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名为idx_字段名

  2. 索引名称必须使用小写

  3. 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。

    说明:

    1. 不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的,另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生
  4. 索引中字段数建议不超过5个

  5. 在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可

    说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高度90%以上,可以使用count(distinct left(列名,索引长度))/ count(*)的区分度来确定

  6. 页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决

    说明:索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,会导致索引失效

  7. 如果有order by的场景,请注意利用索引的有序性,order by最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能

    说明: where a = ? and b = ? order by c; 索引a_b_c

  8. 利用覆盖索引来进行查询操作,避免回表

    说明: 覆盖索引是一种查询效果,用explain的结果,extra列会出现:using index

  9. 利用延迟关联或者子查询优化超多分页场景

    说明:MySQL并不是跳过offset行,而是取offset + N行,然后返回放弃前offset行,返回N行,那当offset特别大的情况下,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写

    正例:先快速定位需要获取的id段,然后再关联

     SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id 
    
  10. SQL性能优化的目标,至少要达到range级别,要求时ref级别,如果可以使consts最好

    说明:

    1. consts单表中最多只有一个匹配行(主键或唯一索引),在优化阶段即可读到数据
    2. ref指的是使用普通索引
    3. range对索引进行范围检索
    4. explain表的结果,type=index,索引物理文件全扫描,速度非常慢,这个index级别比range还低,与全表扫描是小巫见大巫
  11. 建组合索引时,区分度最高的在最左边。

    说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a > ? and b = ? 那么即使a的区分度更高,也必须把b放在索引的最前列

    正例:如果where a = ? and b = ?,a列几乎接近于唯一值,那么只需要单间idx_a索引即可

  12. 防止因字段类型不同造成的隐式转换,导致索引失败

# context # 反射 # channel # LRU # BeanDefinition # JVM # 装饰者模式 # MyBatis # 快慢指针 # 归并排序 # 链表 # hash表 # 栈 # 回溯 # 贪心 # 主从复制 # 二分查找 # 双指针 # 动态规划 # AOF # RDB # 规范 # BASE理论 # CAP # B树 # RocketMQ # Sentinel # Ribbon # Eureka # 命令模式 # 访问者模式 # 迭代器模式 # 中介者模式 # 备忘录模式 # 解释器模式 # 状态模式 # 策略模式 # 职责链模式 # 模板方法模式 # 代理模式 # 享元模式 # 桥接模式 # 外观模式 # 组合模式 # 适配器模式 # 建造者模式 # 原型模式 # 工场模式 # 单例 # UML # 锁 # 事务 # sql # 索引
表设计规范
回文数
  • 文章目录
  •   |  
  • 概览
林亦庭

林亦庭

less can be more

87 文章
11 分类
54 标签
RSS
Github
Creative Commons
© 2021 林亦庭
粤ICP备20029050号