Une requête exécutée par mon application sur un client particulier est très lente. Je me suis rendu compte que le client a beaucoup d'enregistrements en particulier dans une table.Jointure interne avec requête de ralentissement de la grande table
la requête est quelque chose comme ça
SELECT T1.Field1,BT.Field2, T3.Field3
FROM TABLE1 T1 INNER JOIN
BIGTABLE BT ON FIELDS INNER JOIN
TABLE2 T2 ON FIELDS
J'ai remarqué que des commentaires comme celui-ci se révèle dans une requête beaucoup plus rapide:
SELECT T1.Field1,/*BT.Field2,*/ T3.Field3
FROM TABLE1 T1 /*INNER JOIN
BIGTABLE BT ON FIELDS*/ INNER JOIN
TABLE2 T2 ON FIELDS
donc j'ai essayé cette astuce pour réduire la taille de la BigTable :
--I use top 10 while the BIGTABLE contains 150000 records
SELECT top 10 *
INTO #BIGTABLE
FROM BIGTABLE
SELECT T1.Field1,BT.Field2, T3.Field3
FROM TABLE1 T1 INNER JOIN
#BIGTABLE BT ON FIELDS INNER JOIN
TABLE2 T2 ON FIELDS
DROP TABLE #BIGTABLE
Avant l'exécution de ce que je m'attendais à une requête beaucoup plus rapide, mais l'exécution le temps de l'action était assez similaire. Pourriez-vous suggérer un moyen d'étudier la performance?
Merci.
Vous avez probablement juste besoin d'index sur les colonnes utilisées dans les jointures. –
Je ne considérerais pas 150 000 enregistrements comme une "grande" table, en particulier pour SQL Server. Pouvez-vous poster le plan d'exécution? Cela peut être n'importe quoi, mais les statistiques ou un index peuvent être désactivés. Publiez également le schéma, si vous vous joignez à de grands champs varchar non indexés, vous allez avoir un mauvais moment. –
Regardez la première 2 (ou toutes) des vidéos ici: Cela va vous aider beaucoup: https://www.brentozar.com/archive/2016/10/think-like-engine-class-now-free- open-source/ –