Handler_read%反应了数据库如何处理select查询,是mysql调用底层接口的计数情况,可用于调试sql语句
1. Handler_read_key
- Innodb更改接口:ha_innobase::index_read
- 参数解释:index_read这个函数是访问索引的时候定位到值所在的位置用到的函数,因为必须要知道读取索引的开始位置才能向下访问。表示sql语句使用了索引
2. Handler_read_first
- Innodb更改接口:ha_innobase::index_first
- 参数解释:定位索引的第一条数据,实际上也是封装的ha_innobase::index_read 函数(如全表扫描/全索引扫描调用)。在全表扫描和全索引扫描时Handler_read_first和Handler_read_key共同变化
3. Handler_read_next
- Innodb更改接口:ha_innobase::index_next_same ha_innobase::index_next
- 参数解释:访问索引的下一条数据封装的ha_innobase::general_fetch函数,index_next_same和index_next不同在于访问的方式不一样,比如范围range查询需要用到和索引全扫描也会用到index_next,而ref访问方式会使用index_next_same。该参数代表使用到了索引,在调用该接口时会调用index_read,用于索引定位
4. Handler_read_rnd_next
- Innodb更改接口:ha_innobase::rnd_next
- 参数解释:全表扫描访问下一条数据,实际上也是封装的ha_innobase::general_fetch,在访问之前会调用ha_innobase::index_first。该参数表示sql做了全表扫描,即做了聚簇索引的扫描,因此需调用index_first用于索引页面定位,此情况下Handler_read_rnd_next,Handler_read_first,Handler_read_key是同步变化的
5. Handler_read_rnd
- Innodb更改接口:ha_innobase::rnd_pos
- 参数解释:该参数出现在连表查询中没有使用到索引的情况
6. Handler_read_prev
- Innodb更改接口: ha_innobase::index_prev
- 参数解释:该参数出现在使用索引的情况下,进行desc排序的情况
7. Handler_read_last
- Innodb更改接口:ha_innobase::index_last
- 参数解释:访问索引的最后一条数据作为定位,实际上也是封装的ha_innobase::index_read函数,出现在使用索引的情况下用desc排序的情况