Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Alternative zur Verwendung von WHERE ... IN (...) für langsame SQL-Abfragen

Nur zum Lachen, könnten Sie diese Abfrage versuchen:

  select 
    [sID], 
    ROW_NUMBER() over (partition by [sID] order by [wordPos]) [rn], 
    [wordPos], [FTSindex].[wordID]
  from [FTSindex] 
  join ( 
    values (428), (2112)
  ) w (wordID) on w.wordID = [FTSindex].wordID
  order by [sID], [rn] 

Manchmal ist es die richtige Antwort, mehr Hardware auf das Problem zu werfen; obwohl ich zustimme, dass dies ein letzter Ausweg und kein erster sein sollte. Ob dieses spezielle Problem mehr CPU, mehr Speicher oder mehr Spindeln erfordert, hängt von vielen Faktoren ab, einschließlich Ihrer aktuellen Hardware.

Ihre Ergebnismenge von 1,6 Millionen Zeilen mit jeweils 4 Ganzzahlen sollte auf jeder angemessenen Menge aktueller Hardware schnell sortiert werden können. Da Verzögerungen auftreten, scheint es wahrscheinlich, dass auf dem Basissatz von 900 Millionen Zeilen zu viel Verarbeitung stattfindet, und die Herausforderung besteht darin, den Grund dafür zu ermitteln. Können Sie weitere Details zum Abfrageplan anhängen?