У меня есть пара вопросов, касающихся объяснения MySQL.
- На первом этапе оценки используется REF для типа соединения. Однако, после моего исследования ref, он утверждает следующее:
All rows with matching index values are read from this table for each combination of rows from the previous tables.
Что это за предыдущая таблица? Как может быть предыдущая таблица, если это начальный шаг? - Я создал индекс для SE, почему в столбце Extra указано
Using where?
вместоUsing Index
? И в нем конкретно указано, что он использует индекс, просматриваяKEY column : SE
- С точки зрения порядка операций, выполняет ли MySQL все процессы в этом порядке? SE = 5 с использованием индекса, R.Rid = S.Rid с использованием записей из предыдущего шага, R.B = 5 с использованием записей из предыдущего шага?
ИНДЕКС на SE
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 (primary key): an integer from 1 to 100,000
- B: случайное равномерно распределенное целое число от 1 до 10.
- C: случайное равномерно распределенное целое число от 1 до 1000.
Таблица S имеет 500 000 строк и следующие поля:
- SID (primary key): an integer from 1 to 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;