Jag har en tabell där en kolumn X har typen int32. När jag gör anropet
select top(10) from Log where X in(a,b,c,d,e) order by ID desc
går det snabbt med 1-3 argument i in-satsen, men med 10 argument så tar det nästan en sekund. Större antal argument ger timeout i resten av mitt program. Hur många element jag plockar ut verkar inte påverka tiden det tar.
Jag måste ha missat något grundläggande vad gäller in()-satsen, det ska väl gå att skicka med 100-tals argument?
Jag använder SQL Server Compact och antalet rader ligger kring 500 000.
Wishie: Ska prova att byta in mot join och se om det gör någon skillnad. Kan tyvärr inte testa förrän nästa gång jag är på jobbet, om en vecka.
SirMauser: Ärligt talat, nej. Men det beror nog mest på att jag inte är speciellt hemma i SQL-syntaxen. Hur skulle satsen skrivas om enligt dig? Det jag vill göra är ju att ta ut de x första / sista raderna som matchar sökkriteriet (tyvärr finns ju inte select bottom)
SirMauser: va snackar du om egentligen? Nu vet jag inte exakt hur varje sqlhanterare jobbar med sina sql-satser, men har väldigt svårt att tro att den jobbar så som du beskriver det, men du kanske har koll på hur SQL Server Compact utför querys?
ph0ng: Jag antar att fält x är indexerat? Annars har du boven där... För nog har du uppfattat in kommandot rätt... Det borde inte vara några problem att exekvera den queryn
thrawn: x är indexerat, riktigt hur vet jag inte men det finns en nyckel för det (och ID, som det ska sorteras efter, är huvudnyckel i tabellen).
Det konstiga är att färre antal argument går snabbt. Färre antal argument innebär i mitt fall att raderna är utspridda över ett större område, och borde därför vara minst lika långsamt. Antal jämförelser bör vara någorlunda konstant då värdena i x är likformigt fördelade.