nous avons une table avec + - 500k lignes dans la base de données Sql Server 2005 et une de ses colonnes a un index de texte intégral.TOP 2 plus rapide que TOP 1 dans Sql Server?
Nous étions en train de faire quelques tests et nous avons constaté que SELECT TOP 1 ... WHERE CONTAINS (fullTextColumn, 'anyValue') prenait plus de deux minutes pour revenir. Cependant la même sélection, mais avec TOP 2 au lieu de 1 retour en quelques secondes.
Une idée sur pourquoi cela se produit?
Merci!
Modifier: Informations supplémentaires sur le problème. Sur le TOP 1, le plan de requête Sql utilise un Remote Scan alors que dans TOP 2 il utilise Index Seek. Très étrange.
Edit 2: Ce sont les deux plans d'exécution de Sql:
TOP 1
StmtText -------------------------------------------------------------------------------------------------------------------------------------------------- |--Top(TOP EXPRESSION:((1))) |--Nested Loops(Left Semi Join, WHERE:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[idProduto] = [Full-text Search Engine].[KEY])) |--Index Scan(OBJECT:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[ix_tecr_produto_completo_vendaveis01])) |--Remote Scan(OBJECT:(CONTAINS))
TOP 2
StmtText ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |--Top(TOP EXPRESSION:((2))) |--Nested Loops(Inner Join, OUTER REFERENCES:([Full-text Search Engine].[KEY])) |--Remote Scan(OBJECT:(CONTAINS)) |--Index Seek(OBJECT:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[ix_tecr_produto_completo_vendaveis01]), SEEK:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[idProduto]=[Full-text Search Engine].[KEY]) ORDERED FORWARD)
Avez-vous exécuté les tests plus d'une fois? Sinon, le résultat est simplement mis en cache à partir de la première requête. – Guffa
Les serveurs SQL mettent en cache les résultats et ainsi, une requête suivante est généralement beaucoup plus rapide, ce qui expliquerait vos résultats. – dbemerlin
En fait non. Nous l'avons couru pendant 5 minutes et nous nous sommes arrêtés. – tucaz