La requête SQL Azure est lente lorsqu'une colonne indexée utilisée dans la clause where a une valeur particulière

Instance: instance Azure SQL S2 Nous avons une table de candidats qui a ~ 1,7 millions d'loggings. La table des candidats est indexée sur AccountID non-key. AccountID: 646 a 80K lignes et AccountID: 10 a 365K lignes.

Quand nous tirons, select top (10) de la table où non_pk_indexed_col = int

Select top(10) from candidates where accountid=10 

la requête se termine avec 00:00:00 time pris

 Select top(10) from candidates where accountid=646 

, la requête se termine avec 01:45:00 time pris

Pourquoi la même requête prendrait-elle tant de time lorsque la valeur est différente

Très probablement, vous obtenez des plans de requête très différents pour ces deux parameters. En tant que tel, il se comporte nettement mieux que l'autre. Une façon de vérifier serait d'get votre plan d'exécution et de le vérifier.

Vous pouvez le faire en appuyant sur le button Inclure le plan d'exécution réel dans SSMS (environ sept à gauche du button Exécuter) https://msdn.microsoft.com/en-us/library/ms189562.aspx

Comme dit par Neil cependant, vous corrigerez traditionnellement un plan d'exécution pauvre avec des statistics de mise à jour. Vous voudrez cependant mettre à jour avec fullscan pour get les meilleurs résultats possibles, vous pouvez le faire en lançant cette requête:

 DECLARE @sql nvarchar(MAX); SELECT @sql = (SELECT 'UPDATE STATISTICS [' + DB_NAME() + '].[' + rsortingm(sc.name) + '].[' + rsortingm(so.name) + '] WITH FULLSCAN, ALL; ' from sys.sysobjects so join sys.schemas sc on so.uid = sc.schema_id where so.xtype = 'U' FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'); PRINT @sql EXEC (@sql) 

J'espère que cela aide!

J'ai eu un problème similaire qui a été résolu en exécutant exec sp_updatestats . Je devais l'exécuter sur chaque table dans la requête complexe. Je suppose que l'index de la requête sur l'une des tables était corrompu.

Dans votre cas, la command serait UPDATE STATISTICS candidates

L' article de Thomas LaRock couvre cela plus en profondeur.