MySQL - Просмотры - Супер медленный запрос

Это странный вариант. Я пытаюсь использовать представления в 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

9
задан Johan - reinstate Monica 24 September 2011 в 04:51
поделиться