mysql 索引选择算法/原理详解(rows估算)

本文深入探讨MySQL InnoDB的索引选择原理,分析了基于Explain的Rows估算值如何影响索引选择。内容包括:1. 对于`a=***`的查询,如何根据Rows估算值选择索引;2. 当有`order by`时,如何在a和c索引间决策;3. `limit`查询中,如何调整和优化Rows的估算以选择合适的索引。
摘要由CSDN通过智能技术生成

本文章假设读者已了解mysql的索引基础知识,如b+树,聚集索引,并对explain分析结果已了解。以下主要分析mysql的索引选择原理及算法。

Mysql InnoDB的查询一般基于explian所获取的最小rows来选择使用哪一个索引。Rows是一个estimate的值,其估计算法(规则)如下:

1.如果是select c from where a=***,a上有索引。Mysql大概率会使用a上的索引。其rows计算规则为Rows = ((Records_PLeft +  Records_P1 + Records_P2 + ... + Records_P8 + Records_PRight)/10)*Page_Num。

每一页的page_size可以通过innodb_index_stats表里的stat_name字段的n_diff_pfx0?和size估算出。如果n_diff_pfx0?为1000000,size为2000,则每页存储500。如果a对应的记录数在500*10=5000内,则此explian获得的rows基本上比较精确,即通过10页的采样全部获取。如果a对应的记录数在5000以上,则rows不准确。参见https://lists.mysql.com/commits/115810https://www.cnb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值