Интерфейс пользователя для удаления таблиц
Можно проверить, что удаление таблиц работает, посмотрев на вывод EXPLAIN [EXTENDED] и убедившись, что там нет таблиц, которые были удалены:
explain select ACRAT_rating from actors where ACNAM_name=’Gary Oldman’; +----+--------------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ | 1 | PRIMARY | ac_anchor | index | PRIMARY | PRIMARY | 4 | NULL | 2 | Using index | | 1 | PRIMARY | ac_name | eq_ref | PRIMARY | PRIMARY | 4 | test.ac_anchor.AC_ID | 1 | Using where | | 1 | PRIMARY | ac_rating | ref | PRIMARY | PRIMARY | 4 | test.ac_anchor.AC_ID | 1 | | | 3 | DEPENDENT SUBQUERY | sub | ref | PRIMARY | PRIMARY | 4 | test.ac_rating.AC_ID | 1 | Using index | +----+--------------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+
Обратите внимание, что таблица ac_dob отсутствует в выводе. Теперь давайте попробуем получить дату рождения вместо этого:
explain select ACDOB_birthdate from actors where ACNAM_name=’Gary Oldman’; +----+-------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ | 1 | PRIMARY | ac_anchor | index | PRIMARY | PRIMARY | 4 | NULL | 2 | Using index | | 1 | PRIMARY | ac_name | eq_ref | PRIMARY | PRIMARY | 4 | test.ac_anchor.AC_ID | 1 | Using where | | 1 | PRIMARY | ac_dob | eq_ref | PRIMARY | PRIMARY | 4 | test.ac_anchor.AC_ID | 1 | | +----+-------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ 3 rows in set (0.01 sec)
Таблица ac_dob присутствует, в то время как ac_rating и подзапрос исчезли. Теперь, если мы хотим проверить только имя актера:
explain select count(*) from actors where ACNAM_name=’Gary Oldman’; +----+-------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ | 1 | PRIMARY | ac_anchor | index | PRIMARY | PRIMARY | 4 | NULL | 2 | Using index | | 1 | PRIMARY | ac_name | eq_ref | PRIMARY | PRIMARY | 4 | test.ac_anchor.AC_ID | 1 | Using where | +----+-------------+-----------+--------+---------------+---------+---------+----------------------+------+-------------+ 2 rows in set (0.01 sec)
В этом случае будут удалены как ac_dob, так и ac_rating таблицы.
Удаление таблиц из запроса не замедляет запрос и не ограничивает возможности оптимизации, поэтому удаление таблиц происходит безусловно, и нет планов по добавлению каких-либо подсказок для запросов.
Для отладки в отладочных сборках сервера есть переключатель table_elimination=on|off.
См. также
- Эта страница основана на следующей записи блога о удалении таблиц: http://s.petrunia.net/blog/?p=58
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/table-elimination-user-interface/