Citat:
Jag kompletterar lite, om det är okay Proton.
Om det nu är så att det är en mängd frågor där man vill ha ut just boktitlarna för en författare, så kan man inkludera det i indexet. Det blir inte sökbart, men databasmotorn klarar sig med enbart indexet i fråga, istället för att behöva läsa på två ställen, vilket gör att tiden innan resultatset:et trillar fram, blir ännu kortare.
Nackdelen är att man dubbellagrar information. Spelar kanske ingen större roll på små tabeller, men har man miljarder rader i en tabellerna och slänger på många index för att täcka upp de olika frågorna man har, så skapar man andra problem/utmaningar.
Som Proton var inne på, så behöver index underhållas vilket kostar tid i förhållande till mängden indexdata. Man bör också köra någon form av checkdb regelbundet så att man har en fullt fungerande databas, för att inte tala om backuperna. På SQL Server kostar sånt här bedrövligt lång körtid. Så att slentrianmässigt slänga på index är mindre bra. Det kostar också mer prestanda för en skrivning mot en tabell, då den måste skriva både data och index.
Sedan är inte index någon automagisk lösning på alla sökproblem. Det funkar bra för
SELECT bok_titel FROM bibliotek WHERE bok_forfattare = 'August Strindberg';
SELECT bok_titel FROM bibliotek WHERE bok_forfattare LIKE 'August S%';
Men det funkar inte alls för
SELECT bok_titel FROM bibliotek WHERE bok_forfattare LIKE '%Strindberg';
Så ibland är lösningen inte att slänga på ett index, utan att kanske ändra databasstrukturen utifrån hur man hanterar datat i sökningar, om det är en flaskhals.
Som ett litet sidospår, kan jag upplysa om att SQL Server inte direkt gillar databaser större än 4T. Man får problem att på rimlig tid klara av indexunderhåll, backuper/restorer, checkdb och liknande. Även om man slänger dyrbar hårdvara på problemet, så finns det tyvärr en gräns.