我有以下查询在我的Access 2003数据库:SQL Access查询速度
SELECT
Projet.OTP AS OTP,
NumeroDA,
SUM(Quantite*PrixReelCommande) AS PrixTotal,
FIRST(Fournisseur1) AS Fournisseur,
FIRST(Projet.NumeroCommandeReservation) AS NumeroCommande,
FIRST(Projet.GestionContrat) AS GestionContrat,
FIRST(Projet.Acheteur) AS Acheteur,
MIN(DateLivraisonContractuelle) AS DateLivraisonContrat,
MAX(DateFournisseurLivraison) AS DateLivraisonFournisseur,
FIRST(InfoProjet.NomInstallation) AS NomInstallation,
FIRST(InfoProjet.TitreMandat) AS TitreMandat
FROM Projet LEFT JOIN InfoProjet ON Projet.OTP=InfoProjet.OTP
WHERE NumeroDA Like "#*" And NumeroDA IN (
SELECT NumeroDA FROM Projet
WHERE NumeroCommandeReservation="" Or NumeroCommandeReservation Is Null Or NumeroCommandeReservation="0"
)
GROUP BY Projet.OTP, Projet.NumeroDA
ORDER BY Projet.OTP, Projet.NumeroDA
表谟有〜2500行和InfoProjet只有200行。在Access中打开这个表格不到1秒。但是,执行上述查询需要超过5秒钟。
我想知道是否有任何事情可以改善此查询的性能。查询中是否有某些内容我应该避免使用性能?或者我只是在访问限制下?我猜在子查询中使用Like
没有帮助,但是肯定还有其他的东西会降低查询速度。
你对(OTP)指数双双表上?如果是这样,索引是否包括列NumeroDA。你有NumeroCommandeReservation索引,还包括NumeroDA? – ljh 2013-03-25 17:07:12
OTP上没有索引,有多个具有相同OTP的行。但是我们可以在Access中设置非唯一索引,您认为这对于这种情况会有帮助吗? NumeroDA相同,有多行具有相同的NumeraDA和NumeroCommandeReservation。这些PK是NumeroListe和NumeroArticle,都以重复支持为索引。 – dnLL 2013-03-25 17:12:16
它不必是唯一的,非唯一索引也可以帮助查询,如果可以创建复合索引或覆盖索引,它可以帮助更多。 – ljh 2013-03-25 17:15:31