我有几个关于MySQL explain的问题。
- 在评估的第一步中,它使用了REF进行连接类型。然而,根据我对ref的研究,它指出:“对于来自前面的表的每一行组合,都将从此表中读取具有匹配索引值的所有行。”这个“前面的表”是什么?如果它是初始步骤,那么如何会有前面的表呢?
- 我在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;