Это странный вариант. Я пытаюсь использовать представления в 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
При обычном выполнении select требуется около 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 секунд). Поэтому я думаю, что, возможно, есть некоторая оптимизация или кеширование запросов, которые не работают с представлениями, или, может быть, есть какой-то параметр, который мы пропустили в конфигурации MySQL. Но есть ли способ ускорить это представление, чтобы оно было просто хорошим заполнителем для этого запроса?
Выполнение EXPLAIN для двух запросов: Обычный выбор дает:
1, SIMPLE, classifier_results, ALL , idx_date,,,, 594845, Используя where; Использование временных; Использование filesort
Выбор представления дает:
1, PRIMARY,, ALL,,,,, 100,
2, DERIVED, classifier_results, ALL, idx_date,,,, 594845, Использование где; Использование временных; Использование filesort