nous sommes confrontés au problème suivant et nous essayons de trouver la meilleure solution possible.Le moyen le plus rapide pour aller chercher un sous-ensemble (200M) à partir d'une très grande table (600M) dans SQL Server
Nous utilisons SQL Server 2008. Nous avons une table qui a plus de 600 millions d'enregistrements, et a environ 25 colonnes. L'une des colonnes est un ID et est indexée. Nous devons obtenir un sous-ensemble d'enregistrements de cette table. Il y a principalement 2 cas:
a) le sous-ensemble contient entre 1000 et 200 millions de lignes; les ID des lignes à obtenir sont stockés dans une table indexée dans SQL Server; B) le sous-ensemble contient moins de 1 million de rangées; les identifiants des lignes à récupérer sont stockés dans la mémoire du serveur de l'application (application web .NET).
Notre défi est d'obtenir ce sous-ensemble aussi vite que possible. Nous avons besoin de cela pour arriver dans quelques secondes.
Nos solutions à ce jour:
a) nous ne une jointure entre les deux tables. Cela fonctionne mais ce n'est pas assez rapide. La requête ressemble à SELECT * FROM Big_Table JOIN IndexTable ON Big_Table.ID = IndexTable.ID
.
b) nous n'avons pas vraiment de solution. Nous avons essayé d'exécuter une requête WHERE IN, mais cela prend une éternité si le sous-ensemble s'approche des millions de lignes (SELECT * FROM Big_Table WHERE ID IN (ID1, ID2, ID3...)
). Une solution pourrait consister à stocker les index dans une table temporaire, mais cela revient ensuite au cas a.
Nous essayons d'optimiser SQL Server autant que possible, notamment en utilisant de bons index et partions. Je demande plus aujourd'hui ce que vous pensez que la meilleure approche est d'extraire le sous-ensemble dans les deux cas (a et b).
Toute idée ou suggestion est appréciée.
Merci
Désolé à la question, mais avez-vous besoin de tirer les données? Pouvez-vous juste travailler dans la DB? –
Par curiosité pourquoi essayez-vous d'aller chercher 200M lignes en une fois? –
Avez-vous besoin de retourner TOUTES les colonnes? Je recommande de ne nommer explicitement que les colonnes que vous souhaitez renvoyer. – AdaTheDev