Я только изучаю MySQL, и у меня есть проблема.
Иногда для различных запросов MySQL начинает вычислять при 100% загрузке ЦП в течение 15-20 секунд и затем возвращает результат, обычно говоря:
Запрос занял 0,1780 сек.
Это происходит по очень простым запросам. Например, этот запрос занял 0,36 секунды.
(SELECT DISTINCT a1.actor
FROM actors AS a1,
actors AS a2
WHERE a1.title = a2.title
AND a1.YEAR = a2.YEAR
AND a1.actor = a2.actor
AND a1.character_name <> a2.character_name)
Листинг таблицы (7000 строк) занял 0,001 секунды.
С другой стороны, когда я просто хочу объединить эти два, MySQL сходит с ума и начинает вычислять в течение 30 секунд, а затем, наконец, возвращает: Query took 0.1800 sec)
SELECT actor
FROM actors
WHERE actor NOT IN (SELECT DISTINCT a1.actor
FROM actors AS a1,
actors AS a2
WHERE a1.title = a2.title
AND a1.YEAR = a2.YEAR
AND a1.actor = a2.actor
AND a1.character_name <> a2.character_name)
Почему это происходит?
Вот другой пример. Этот запрос занимает около 2 секунд и сообщает 0,5
SELECT DISTINCT a1.character_name
FROM (actors AS a1
NATURAL JOIN movies AS m1),
(actors AS a2
NATURAL JOIN movies AS m2)
WHERE a1.character_name = a2.character_name
AND ( m1.title <> m2.title
OR ( m1.title = m2.title
AND m1.year <> m2.year ) )
AND m1.country <> m2.country
С другой стороны, этот запрос занимает 15-20 секунд, процессор 100%, но сообщает 0,3 секунды. (Единственное отличие - это скобка после AND (....)
SELECT DISTINCT a1.character_name
FROM (actors AS a1
NATURAL JOIN movies AS m1),
(actors AS a2
NATURAL JOIN movies AS m2)
WHERE a1.character_name = a2.character_name
AND m1.title <> m2.title
OR ( m1.title = m2.title
AND m1.YEAR <> m2.YEAR )
AND m1.country <> m2.country
Я использую phpMyAdmin и последнюю версию XAMPP для тестирования.
Обновление:
Неправильное время запроса, похоже, связано с phpMyAdmin, в командной строке я получаю следующее время:
- 1-й запрос: MySQL: 0,36 с - PostgreSQL: 0,37 с
- 2-й запрос: MySQL: 43 с - PostgreSQL: 0,42 с
- 3-й запрос: MySQL: 4,86 с - PostgreSQL: 0,05 с
- 4-й запрос: MySQL: 1 мин 5 с - PostgreSQL: 15 секунд
Итак, у меня есть ответ на вопрос, почему время запроса сообщалось неправильно (ошибка в phpMyAdmin или XAMPP), меня интересует почему такие похожие запросы имеют такую большую разницу во времени выполнения? 1064 *
Обновление 2:
Просто для полноты я тоже провел тестирование с PostgreSQL