【发布时间】:2016-03-11 07:11:49
【问题描述】:
我有几个关于 MySQL 解释的问题。
- 在评估的第一步中,它使用 REF,用于连接类型。但是,根据我对 ref 的研究,它指出以下内容:
All rows with matching index values are read from this table for each combination of rows from the previous tables.上一张表是什么?如果是初始步骤,怎么会有前一个表? - 我在 S.E 上创建了一个索引,为什么它在 Extra 列中显示
Using where?而不是Using Index?它特别声明它通过查看KEY column : SE来使用索引 - 就操作顺序而言,MySQL 是否按此顺序处理所有事情? S.E = 5 使用索引,R.Rid = S.Rid 使用上一步的记录,R.B = 5 使用上一步的记录?
S.E 指数
mysql> Create index SE on S(E);
Query OK, 0 rows affected (1.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> explain SELECT COUNT(R.RID) FROM R, S WHERE R.RID=S.RID AND R.B=5 AND S.E=5;
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+
| 1 | SIMPLE | S | ref | RID,SE | SE | 5 | const | 6 | Using where |
| 1 | SIMPLE | R | eq_ref | PRIMARY | PRIMARY | 4 | project2.S.RID | 1 | Using where |
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+
数据集
-
表 R 有 100,000 行和以下字段:
- RID(主键):从 1 到 100,000 的整数
- B:从 1 到 10 的随机均匀分布整数
- C:从 1 到 1,000 的随机均匀分布整数
-
表 S 有 500,000 行和以下字段:
- SID(主键):1到500,000之间的整数
- RID(R 的外键):从 1 到 100,000 的随机均匀分布整数
- D:从 1 到 100 的随机均匀分布整数
- E:从 1 到 100,000 的随机均匀分布整数
查询
SELECT COUNT(R.RID) FROM R, S WHERE R.RID=S.RID AND R.B=5 AND S.E=5;
【问题讨论】:
-
请采用文本格式的架构
-
这里找到问题 2 的答案:stackoverflow.com/a/9534935/2022209
-
为什么这个问题被否决了? OP 提出了一个很好的尝试来提出这个问题。
标签: mysql sql database explain sql-execution-plan