⑩ 覆盖索引&索引下推

1 覆盖索引

​ 查询中使用的索引包含了结果集需要的字段,因此少了回表的操作,加快了查询效率;

​ 简单的说就是,二级索引中的索引值+主键,刚好包含了select选中的列。

# 使用了索引覆盖
CREATE INDEX idx_course_id(course_id) ON student_info
SELECT st.course_id FROM student_info st WHERE st.course_id > 1000
# 未使用到索引覆盖
SELECT st.course_id,st.NAME FROM student_info st WHERE st.course_id > 1000

覆盖索引的好处

​ 1 避免了通过二级索引查询后还要去聚簇索引回表的操作;

​ 2 可以吧随机IO变成顺序IO加快查询效率;

2 索引下推

​ 如果没有索引下推,二级索引匹配后需要定位到基表的行,然后再进行筛选,有了索引下推之后,where中的条件使用索引就能进行筛选。

#使用索引下推的情况
CREATE INDEX idx_course_name ON student_info (course_id,NAME)
EXPLAIN SELECT course_id FROM student_info WHERE course_id>1000 AND NAME LIKE '%ao%'
3 数据库常用优化方案
3.1 数据表结构优化

1 冷热数据分离

减少表的宽度,减少磁盘IO,提高缓存的利用率;

2 增加中间表

将原本需要联合查询的表的数据构建为中间表,减少join操作,但是这种措施数据一致性需要保证;

3 增加冗余字段

4 优化数据类型

优先选择符合存储字段最小的数据类型(非负的整数加:UNSIGNED)

浮点数据类型用DECIMAL

5 尽量使用非空约束

3.2 大表优化

1 限定查询的范围

禁止不带任何限制数据范围条件查询语句

2 读写分离

通过MySQL主从复制,进行读写分离

3 垂直拆分

垂直分库与垂直分表

4 水平拆分

把一张表的数据拆成几份,比如按照时间分。。等等。。分片规则

3.3 其它调优策略

1 服务器语句超时处理

2 创建全局通用表空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值