Сертификат (или опрос) присваивается группе объектов, охватывающих различные районы и районы (область содержит несколько районов).Предполагается, что эти средства отвечают на опросы, и их ответы записываются в базу данных с использованием ResponseDate (обычно ноль, пока они не отвечают).
Я пытаюсь получить количество ответов в пределах области, а также в пределахр-н.Запросы практически идентичны, но тот, который охватывает больше объектов (т. Е. По области), выполняется мгновенно, а другой по районам занимает 104 секунды!Я проверил таблицы, чтобы увидеть, есть ли какая-либо разница между таблицами AREA и DISTRICT, и не нашел ничего;Я провел большую часть дня и не могу понять, в чем дело.
Table FACILITYDATA: FACID, AREAID, DISTRICTID.
Table AREA: AREAID, AREA
Table DISTRCIT: DISTRICTID, AREAID, DISTRICT
Table FACILITYCERTIFICATE: FACCERTIFICATEID, FACID, CERTITEMID
Table FACILITYCOMPLICANCE: FACCERTIFICATEID, RESPONSEDATE
-- National, by Area (almost instant result)
select a.Area, sum(case when fcom.ResponseDate is not null then 1 else 0 end) Cnt_Certified
from FacilityCertificate fc
inner join FacilityData fd on fd.FacID = fc.FacilityID
inner join Area a on a.AreaID = fd.AreaID
left join FacilityCompliance fcom on fcom.FacCertificateID = fc.FacCertificateID
where fc.CertItemID = 1
group by a.Area
order by a.Area;
-- by District, within given Area -- Takes 104 seconds
select d.District, sum(case when fcom.ResponseDate is not null then 1 else 0 end) Cnt_Certified
from FacilityCertificate fc
inner join FacilityData fd on fd.FacID = fc.FacilityID
inner join District d on d.DistrictID = fd.DistrictID
left join FacilityCompliance fcom on fcom.FacCertificateID = fc.FacCertificateID
where fc.CertItemID = 1 and fd.AreaID = 4
group by d.District
order by d.District;
Я не уверен, достаточно ли этой информации, или понадобятся образцы данных.