2014-09-21 2 views
0

У меня есть запрос в MySQL, который в основном возвращает много сгруппированных результатов из таблицы с ~ 5 миллионами строк. Я группирую 8 отдельных вещей и возвращаю 20 или около того столбцов, многие из которых являются вычислениями (case when()). Я знаю, что это займет много времени, и мой компьютер не самый быстрый (хотя он не особенно медленный). Но он работает в течение 9 часов и все еще не закончен. Это нормально? Похоже, что ничего не должно занять много времени.MySQL Query не перестает работать

+1

9 часов слишком длинны, имеются ли соответствующие индексы на этих столбцах, вы можете опубликовать схему таблицы и запрос, чтобы посмотреть – radar

+1

можете ли вы разместить свой sql? вы используете много подзапросов? – underscore

+0

Нет индексов. Зная это, вы все еще думаете, что 9 часов слишком длинны? Я не очень разбираюсь в SQL и не думал добавлять индексы в столбцы. – japem

ответ

0

В: Это нормально?

A: Для запроса, который производит сверхбольшой промежуточный набор результатов, запрос может выполняться в течение очень долгого времени, даже в течение девяти часов.

Это не ненормально для запроса, который делает необоснованный объем работы, чтобы сделать неоправданно долгое время.

Но мы обычно избегаем написания запросов, которые делают ненормальное количество работы.

Относительно того, почему запрос делает так много работы ... вероятно, очень неэффективный план выполнения, не используя индексы для операций JOIN или огромный промежуточный набор результатов.

С другой сессии вы можете сделать SHOW PROCESSLIST, чтобы убедиться, что запрос действительно запущен. Выход будет включать истекшее время, в течение которого сеанс находился в текущем состоянии ...

Смежные вопросы