SQL-запрос - похожие запросы, большая разница во времени выполнения - PullRequest
0 голосов
/ 18 мая 2018

Сертификат (или опрос) присваивается группе объектов, охватывающих различные районы и районы (область содержит несколько районов).Предполагается, что эти средства отвечают на опросы, и их ответы записываются в базу данных с использованием 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;

Я не уверен, достаточно ли этой информации, или понадобятся образцы данных.

1 Ответ

0 голосов
/ 21 мая 2018

Я не уверен, почему, но как только я изменил индексирование в таблице «DISTRICT» с Clustered на Non-Clustered, запрос выполнялся за 0 секунд вместо 104 секунд.

Я читал об индексах и о том, как они настроены, и в статьях было показано использование некластеризованной опции при настройке одного и всех моих индексов, которые я не создал, но думаю, что они были созданы при настройкестолбец как первичный ключ, были помечены как кластеризованные.

Возможно, кто-то может пролить свет на это, но, похоже, это изменение решило мою проблему.Спасибо всем, кто упомянул, что проблема может быть связана с индексом.

...