我有一个问题:
SELECT MIN(Numero)
FROM view_OperatoriCpuLiberi
WHERE IDCpu = '9e2da792-be47-e311-aea8-b4b52fb677e0'
AND Numero > 100 AND IDGruppo IN
(
SELECT AssociazioniCampo.IDOggetto AS IDGruppiAutorizzati
FROM Anag.ListeAssociazioni
INNER JOIN Anag.AssociazioniCampo ON ListeAssociazioni.IDLista = AssociazioniCampo.IDLista
INNER JOIN Campo.Oggetti ON AssociazioniCampo.IDOggetto = Oggetti.IDOggetto
WHERE ListeAssociazioni.IDTipoMacroOggetto = 5
AND ListeAssociazioni.IDTipoAssociatoCampo = 74
AND Deleted = 0
AND IDMacroOggetto = 'c3f2c542-a195-11e0-a2e3-000c2962b9f0'
)
'view_OperatoriCpuLiberi'包含81981行和嵌套查询(括号内)861行。查询耗时超过2秒。如果我删除嵌套查询然后'IDGruppo IN'指令它变得非常快。我能做什么?
答案 0 :(得分:1)
这就是我可能会编写此查询的方式,但它是否表现更好可能取决于索引的编写方式等。
你没有在所有列上使用别名,所以我不得不猜测它们中的一些来自哪里。
SELECT
MIN(OCL.Numero)
FROM
view_OperatoriCpuLiberi OCL -- Ugh. Object name prefixes are evil.
INNER JOIN Anag.AssociazioniCampo AC ON
AC.IDOggetto = OCL.IDGruppo
INNER JOIN Anag.ListeAssociazioni LA ON
LA.IDLista = AC.IDLista AND
LA.IDTipoMacroOggetto = 5 AND
LA.IDTipoAssociatoCampo = 74 AND
LA.Deleted = 0 AND
LA.IDMacroOggetto = 'c3f2c542-a195-11e0-a2e3-000c2962b9f0'
INNER JOIN Campo.Oggetti O ON O.IDOggetto = AC.IDOggetto
WHERE
OCL.IDCpu = '9e2da792-be47-e311-aea8-b4b52fb677e0' AND
OCL.Numero > 100 AND
您至少应该拥有表之间所有外键的索引。