Handler_read%相关数据接口调用

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-30 07:57:20

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排序的情况
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!