`
jedy
  • 浏览: 147724 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

explain的误解

阅读更多
发现MySQL的explain还是很有迷惑性的。

看下面两个sql的explain,(i,j)是tt的主键

mysql> explain select * from tt where i between 3 and 5 and j = 4\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tt
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: NULL
rows: 8
Extra: Using where; Using index
1 row in set (0.00 sec)

mysql> explain select * from tt where i > 2 and i < 6 and j = 4\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tt
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: NULL
rows: 8
Extra: Using where; Using index
1 row in set (0.00 sec)

看上去如果使用了between,那么MySQL可以用的索引的两列。但仔细的研究了一下,发现实际并不是这样。between 3 and 5可以写为(i>3 or i=3) and (i<5 or i=5),是这两个等号使用了两列,而大于和小于的判断仍然是index扫描,只用了一列。

再看另一个

mysql> explain select * from tt where i in (3,4,5) and j=4\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tt
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: NULL
rows: 3
Extra: Using where; Using index
1 row in set (0.00 sec)

这个才是真正用了两列,可以看到这里估计的行数是3,而刚才两个是8。用 show status 可以看得更清楚一些:

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
+-----------------------+-------+
6 rows in set (0.00 sec)

mysql> select * from tt where i in (3,4,5) and j=4;
+---+---+
| i | j |
+---+---+
| 3 | 4 |
+---+---+
1 row in set (0.00 sec)

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 4 |
| Handler_read_next | 1 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
+-----------------------+-------+
6 rows in set (0.00 sec)

mysql> select * from tt where i between 3 and 5 and j = 4;
+---+---+
| i | j |
+---+---+
| 3 | 4 |
+---+---+
1 row in set (0.00 sec)

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 6 |
| Handler_read_next | 10 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
+-----------------------+-------+
6 rows in set (0.00 sec)

后一个sql中有9次read_next_key,说明做了索引扫描。
分享到:
评论

相关推荐

    【精选】避免被误解(Avoid,Misunderstanding).doc

    (To prevent misunderstanding, you'd better explain the issue to her clearly.) 3. 即使不吃早餐,也不能帮助减肥。(Skipping breakfast won't contribute to weight loss either.) 这些例子说明,在实际...

    模块拓展unit social communicationPPT课件.pptx

    如“human”(人类)、“native”(本地的、母语者)、“tolerant”(宽容的)、“annoy”(使恼怒)、“pretend”(假装)、“misunderstand”(误解)、“ask for”(请求)、“admit”(承认)、“politely”...

    MySQL SQL优化 .docx

    1. **使用EXPLAIN命令:** EXPLAIN可以帮助我们了解SQL查询的执行计划,识别出哪些部分可能导致性能问题。 2. **调整查询逻辑:** 修改查询逻辑以利用索引或者其他数据结构,减少复杂度较高的操作。 3. **利用提示...

    本科学习类话题(复试口语).pdf

    在与考官交流的过程中,如果考官没有理解或误解了考生的回答,应当礼貌地要求澄清,并用更清晰的方式进行解释,例如:“Sorry, maybe you misunderstood, could you give me a chance to explain?” 或 “Excuse me,...

    英语动词25种句型.doc

    通过类比,他们可能会错误地构建出"Please explain me the meaning"(而应是"Please explain the meaning to me")。他们可能遇到"I intend to do"、"I propose to do"和"I want to do"这样的句子,然后构造出"I ...

    2020考研复试口语常考话题.docx

    同时,当自己的回答被误解时,应主动解释,如"Excuse me. I guess I am not making myself clear. May I explain further?"或"May I try to explain myself in another way.",确保信息准确传达。 当得到老师的肯定...

    浙江省2019届中考英语总复习第一篇教材梳理篇课时训练16Modules5_6九上试题新版外研版

    4. 英语词汇的应用:学习和运用诸如 "accusation"、"complain"、"explain" 等词汇。 5. 文化差异:了解西方学校环境中教师与学生、家长之间的沟通方式。 这个课件的目的是让学生在准备中考的过程中,不仅提升语言...

    [教师公开招聘考试密押题库与答案解析]教师公开招聘考试小学英语分类模拟10.docx

    he didn't explain clearlyD. he didn't know their body language答案:D[解析] 根据第四段最后一句“You have to know where a person is from to understand whether they mean 'yes' or 'no'”可知,Tom 不了解...

    标准化沟通模板.doc

    标准化的沟通模板在医疗行业中尤为重要,因为它可以确保信息的准确传递,减少误解和错误。这里提到了两种常见的沟通工具:CICARE和SBAR。 - **CICARE模型**(Connection, Identify, Care, Ask, Respond, Explain...

    简练的外贸沟通方法.doc

    5. 确认重要细节:在涉及关键条款如金额、交货条件和日期时,要反复确认以免出现误解。可以使用"Is this what we decided?"来检查合约内容是否与商定一致。如果发现错误,及时提出"I'll have to return this ...

    高中英语句型总结高中系列中精选出的300个重点句型.doc

    3. "As a matter of fact…" 用来强调事实或纠正误解,表明说话者的真实观点。例如:"As a matter of fact, I have already finished the assignment." 4. "As far as I'm concerned/…" 这个句型用于表达个人观点...

    kubernetes in action errata.docx

    5. **kubectl命令使用**:在第140页,原本提到使用`kubectl explain`检查资源详情,实际上应该是`kubectl describe`,后者能提供更详尽的信息。 6. **配置文件路径**:第146页的Listing 5.14中,路径`/foo`应改为`/...

    【创新设计】(广东专用)2015高考英语 大二轮总复习测试 仿真模拟卷二

    5. 如果是你的错,承认并解释(explain)你的错误,表明你不应该说那些话或做那些事,表达你的歉意。 6. 不要用电子邮件或者电话(call)道歉,而应该勇敢地面对面道歉。这样更能显示你的诚意。 7. 如果你的朋友...

    大学关于友谊英语演讲稿.docx

    Well, let me explain. In the journey of life, especially during our college years, friendships are formed, tested, and sometimes challenged. Perseverance plays a crucial role in fostering and ...

    小学英语英语故事幽默故事Leavethecolor把颜色留下

    这个幽默的对话反映出人们对新事物的理解可能存在误解,并且在面对日常生活中不常见的消费模式时,会产生有趣的交流。 这个故事在小学英语教学中可以作为一个生动的例子,帮助孩子们学习英语词汇、理解句子结构,...

    DB2-ErrorCode解释大全

    在SQL语句中,如果列名没有明确限定(即没有指定所属的表名),而该列名与其他表的列名相同,DB2可能会误解该列名的指向,从而导致错误。 **SQLCODE:** +204 **SQLSTATE:** 01532 **说明:** 命名的对象未在DB2中...

    sql语句(mysql优化)绝对经典.docx

    这通常是一个误解,因为数据库按行存储数据,读取一个或多个字段通常不会显著改变IO量。但如果查询能利用覆盖索引,即仅通过索引获取所需数据,而不必回表获取其他字段,那么选择较少的字段确实能减少IO。 误区4:...

Global site tag (gtag.js) - Google Analytics