Hej, Vet inte om det blir snabbare med IN, men det blir definitivt snyggare SQL att läsa. Troligen kan det också bli snabbare eftersom SQL servern då får hantera allt inom IN som en array. Som Thomas säger, en variant är att om du vet hur intervallet skall se ut så kan du skapa en sub-query: Eller så kan du, beroende på databas, använda en temporär tabell som du använder dig av. Vad finns det för något som är gemensamt för användarna?optimering av SQL-fråga
Jag ska göra en select från en tabell med anställda i ett företag med urval på fälten ftgnr och anstnr. Som det är gjort nu så sätts en sträng ihop i programkoden som tar varje anstnr och lägger till OR. Så om t ex företagsnr är 20 och jag vill ha anstnr 10,11 och 12 så blir frågan
SELECT * FROM tabell WHERE ftgnr = '20' AND (anstnr = '10' OR anstnr = '11' OR anstnr = '12'). Detta funkar ju bra med några stycken anstnr, men om det t ex är 500 anstnr så blir ju frågan extremt stor. Finns det nån smartare lösning? Är det snabbare att använda anstnr IN (....) istället för alla OR?
Använder SQL Server 2000 / 2005.Sv: optimering av SQL-fråga
Men det blir ju också lättare för programmet att sätta ihop SQL frågan, så jag rekommenderar att du använder dig av IN istället för en stor mängd OR.Sv:optimering av SQL-fråga
SELECT * FROM tabell WHERE ftgnr = '20' AND anstnr IN(10,11,12)
eller
SELECT * FROM tabell WHERE ftgnr = '20' AND anstnr IN(select anstnr from tabellanst where anstnr between 10 and 20)
eller
SELECT * FROM tabell WHERE ftgnr = '20' AND anstnr IN(select anstnr from tabellanst where anstnr < 30)
Så länge inte datat som returneras är strängar i subfrågan fungerar detta..Sv: optimering av SQL-fråga
Sv: optimering av SQL-fråga
Är det troligt att ett urval vill återanvändas?
Då borde du ha en tabell som du sparar dem i och istället göra en join.