跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 有条很简单的 sql explain 后 extra 有不明白的,还望大家指点一二!
未分類
6 9 月 2020

有条很简单的 sql explain 后 extra 有不明白的,还望大家指点一二!

有条很简单的 sql explain 后 extra 有不明白的,还望大家指点一二!

資深大佬 : aimaodeyuer 9

CREATE TABLE msg (   id bigint(20) unsigned NOT NULL AUTO_INCREMENT,   msg_id bigint(20) NOT NULL,   status tinyint(4),   content text NOT NULL,   create_time datetime NOT NULL,   PRIMARY KEY (id),   KEY idx_msg_id (msg_id) ) ENGINE=InnoDB AUTO_INCREMENT=3048 DEFAULT CHARSET=utf8mb4 

select id from msg where msg_id = #{param1} order by id desc limit 10;

显示走了 idx_msg_id 索引,extra 是 Using where; Using index 。 去掉 order by id 后 ,extra 是 Using index 。

PS:默认索引扩展 use_index_extensions=on

Q:既然 idx_msg_id 索引上有 id,且 select 只查询 id,order by id 为何会导致出现 Using where;

附上 mysql 官方文档:https://dev.mysql.com/doc/refman/5.7/en/index-extensions.html 看完也没弄明白。

大佬有話說 (3)

  • 主 資深大佬 : aimaodeyuer

    阿,这么久了,没人吗?

  • 資深大佬 : tomy0608

    按照文档上的意思, 就是在你开启了 index_extensions 之后, 会在你自建的索引基础上拓展一个类似联合索引的样子. 从你这个表来说就是 `index(msg_id, id)`.
    执行器器在执行的时候能提高性能. 原话是这样的
    “`
    The optimizer takes into account the primary key columns of the extended secondary index when determining how and whether to use that index. This can result in more efficient query execution plans and better performance.
    “`

    但你这个实际跟这个没啥关系. `Using where` 表示 MySQL 服务器会在搜索引擎执行完之后再进行过滤操作.

    在你没有 order by 时, 直接通过索引定位到了, 所以并不需要过滤操作.(可以这么认为)

    但是你要排序(order by)的话, 是需要基于一个结果排序的, 这个结果便是 Using index 查出来的结果. (虽然你这查出来可能只有一个)

  • 主 資深大佬 : aimaodeyuer

    @tomy0608 首先感谢老哥的解答,我先理解一波你的语义

    但是你要排序(order by)的话, 是需要基于一个结果排序的, 这个结果便是 Using index 查出来的结果. (虽然你这查出来可能只有一个)

    1.这个 msg_id 不是唯一键,是多值的。
    2.idx_msg_id 索引是有 id 的值的所以不需要回表,而且是有序的,所以不需要额外的外部排序( Using filesort )
    问题就是我还是不理解何来 using where 一说,不应该直接索引覆盖就完事了吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具