2016-12-07 1 views
-1

Как я могу оптимизировать этот запрос в MySQL? Получение муниципалитета из провинции? TIAКак я могу оптимизировать этот запрос? который извлекает значение столбца

select DISTINCT PM.municipality, count(*) 
from anReference as R 
inner join anFieldInfo as F on R.ref_id = F.ref_id 
inner join tblProvince as PP on F.province_id = PP.province_id 
inner join tblMunicipality as PM on F.municipality_id = PM.municipality_id 
WHERE R.category = 0 AND R.test = 1 
AND PP.region_id=2 
AND PM.province_id=7 
AND R.date_accessed between '2016-11-01 00:00:00' and '2016-11-30 23:59:00' 
GROUP BY PM.municipality; 

Вот что я получил, когда запустил EXPLAIN. enter image description here

+0

вопросы эффективности должны включать EXPLAIN ANALYZE и некоторой информация о размере таблицы, индексе текущей производительности времени, время желания и т.д. Slow - относительный термин, и нам нужна реальная ценность для сравнения. MySQL Также прочтите [How-to-Ask] (http://stackoverflow.com/help/how-to-ask) – e4c5

+0

Как отредактировать мой вопрос, чтобы включить объяснение? Спасибо –

+0

есть ссылка на редактирование чуть ниже вопроса – e4c5

ответ

1

Если вы получаете завышенные значения, а затем рассмотреть вопрос переписывания что-то вроде:

SELECT PM.municipality, count(*) 
    FROM PM 
    WHERE tblMunicipality AS PM.province_id=7 
     AND EXISTS (...) 
    GROUP BY PM.municipality 

Если подзапрос (в EXISTS) является JOINs все другими таблицами.

В стороне: Это «простой» способ проверить диапазон месячный:

AND R.date_accessed >= '2016-11-01' 
AND R.date_accessed < '2016-11-01' + INTERVAL 1 MONTH 
Смежные вопросы