sql >> Databasteknik >  >> RDS >> Sqlserver

Alternativ till att använda WHERE ... IN (...) för långsamma SQL-frågor

Bara för att fnissa igen, kan du prova den här frågan:

  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] 

Ibland är det rätta svaret att kasta mer hårdvara på problemet; även om jag håller med om att detta borde vara en sista utväg och inte en första. Huruvida det här specifika problemet kräver mer CPU, mer minne eller fler spindlar beror på många faktorer, inklusive din nuvarande hårdvara.

Din resultatuppsättning på 1,6 miljoner rader, vart och ett av 4 heltal, bör sorteras snabbt på alla rimliga mängder aktuell hårdvara. Eftersom förseningar uppstår verkar det troligt att för mycket bearbetning sker på basuppsättningen på 900 miljoner rader, och utmaningen är att identifiera varför. Kan du bifoga mer information om frågeplanen?




  1. Snabbare att randomisera många resultat på MySQL Server eller i PHP

  2. Korrekt installationsorder för Visual Studio 2010 med SQL Server 2008 och Office 2007?

  3. 2 sätt att infoga en ny rad i en sträng i SQLite

  4. MySql-fråga:inkludera dagar som har COUNT(id) ==0 men bara under de senaste 30 dagarna