MySql索引创建失效优化

26次阅读
没有评论

共计 699 个字符,预计需要花费 2 分钟才能阅读完成。

创建索引的原则

  • 数据量大,查询频繁,10万以上的表
  • 经常作为查询 排序 分组的字段
  • 区分度高的列作为索引
  • 字符串类型,字段比较长,适合做前缀索引
  • 尽量使用联合索引,减少单列索引。考虑到覆盖索引,避免回表,提高查询效率
  • 控制索引数量,减少维护成本
  • 如果索引列不能存NULL值,创建表时使用NOT NULL约束它。优化器知道每列是否包含NULL的时候,它可以更好地确定哪个索引最优效率用于索引。

 

索引失效的情况

  • 违返最左原则,严格按照联合索引的顺序使用
  • 范围查询时,右边使用的索引会失效
  • 模糊查询时,%放在前面
  • 添加了字段的索引上进行运算操作或者类型转换
    • mobile字段原本是字符串类型
    • explain select * from user where mobile = 17868884634; (索引失效)

      • type: all
    • explain select * from user where mobile = ‘17868884634’;

      • type: ref

SQL性能优化总结

  1. 表设计优化, 选择合适的数据类型
  2. sql语句优化
  3. 索引优化
  4. 主从复制 读写分离
  5. 分库分表

MySql索引创建失效优化

事务的特性

ACID: 原子性, 一致性,隔离性,持久性

MVCC(多版本并发控制)

  • Mutil-Version-Consistence-Controller
  • 实现原理
    • 隐藏字段: 事务ID(trx_id), 回滚指针(roll_pointer)
    • undo log: 保证事务的一致性和隔离性
    • readview
      • 当前读: 读的数据的最新版本
      • 快照读: select不加所读取, 比如RR开启事务的第一次读
MySql索引创建失效优化

mvcc原理

正文完
 
BlackBeans
版权声明:本站原创文章,由 BlackBeans 2025-01-13发表,共计699字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)