Это странно. Я пытаюсь использовать Views в MySQL (я достаточно новичок в MySQL с большим опытом работы с Sybase и SQL Server). В любом случае, в этом новом проекте мы используем MySQL, так как он, кажется, имеет хорошую производительность. Однако, чтобы упростить запросы к веб-интерфейсу, мы решили создать несколько представлений, все работают хорошо, но на их выполнение уходит вечность.
Представления очень просты, просто выберите операторы (в этих таблицах несколько миллионов строк) . Скажем, например, этот запрос:
SELECT CAST(classifier_results.msgDate as DATE) AS mdate
,classifier_results.objClass AS objClass
,COUNT(classifier_results.objClass) AS obj
,classifier_results.subjClass AS subjClass
,COUNT(classifier_results.subjClass) AS subj
FROM classifier_results
WHERE (classifier_results.msgDate >= (curdate() - 20))
GROUP BY
CAST(classifier_results.msgDate as DATE)
,classifier_results.objClass
,classifier_results.subjClass
ORDER BY classifier_results.msgDate DESC
При запуске в обычном режиме для возврата результата требуется около 1,5 секунд.
Однако, когда этот запрос помещается в представление (как есть) - т.е.
CREATE VIEW V1a_sentiment_AI_current AS
SELECT CAST(classifier_results.msgDate as DATE) AS mdate
,classifier_results.objClass AS objClass
,COUNT(classifier_results.objClass) AS obj
,classifier_results.subjClass AS subjClass
,COUNT(classifier_results.subjClass) AS subj
FROM classifier_results
WHERE (classifier_results.msgDate >= (curdate() - 20))
GROUP BY
CAST(classifier_results.msgDate as DATE)
,classifier_results.objClass
,classifier_results.subjClass
ORDER BY classifier_results.msgDate DESC
Запрос занимает в 10 раз больше времени (22-30 секунд). Поэтому я думаю, что, возможно, есть какая-то оптимизация или кэширование запросов, которые не работают с Views, или, может быть, есть некоторые настройки, которые мы пропустили в конфигурации MySQL. Но есть ли способ ускорить это представление, так что это просто полезный заполнитель для этого запроса?
Запуск EXPLAIN для двух запросов:
Нормальный выбор дает:
1, SIMPLE, classifier_results, ALL, idx_date,,,, 594845, Использование где; Используя временные; Использование сортировки файлов
Выбор представления дает:
1, ПЕРВИЧНЫЙ,, ВСЕ,,,,, 100,
2, ПОЛУЧЕНО, classifier_results, ALL, idx_date,,,, 594845, Использование где; Используя временные; Использование файловой сортировки