Citat:
Ursprungligen postat av
user3815276
https://en.wikipedia.org/wiki/Index_(database)
Jag är inte så bra på engelska och det fanns ingen svensk sida på Wikipedia. Finns det någon där ute som kan sammanfatta den där artikeln på ett enkelt sätt och förklara för mig vad ett index är i en databas?
Om jag har en databas som är X GB stor, med miljoner rader data, kommer jag att kunna söka mycket snabbare om jag skapar ett index för databasen?
Hur ser det här indexet ut i databasen? Hur gör man för att skapa indexet?
Påverkas storleken av databasen av att man skapar ett index?
Hur mycket snabbare blir en sökning i databasen med ett index?
// user3815276
Citat:
Ursprungligen postat av
user3815276
Dababasen jag använder är strukturerad enligt följande:
Kod:
CREATE TABLE bibliotek(
bok_titel text,
bok_forfattare text,
bok_isbn text unique,
bok_beskrivning text,
bok_publicerad text,
bok_forlag text
);
Exampel på sökning:
Kod:
SELECT bok_titel FROM bibliotek WHERE bok_forfattare = 'August Strindberg';
Kan en sökning som den där göras snabbare genom att skapa ett index för databasen?
Hur gör man?
Index på tabeller (eller snarare kolumner i tabeller) används mycket riktigt av query optimizern för att snabbare hitta data, man kan se det som en katalog över var data ska finnas. Denna katalog är betydligt mindre än datat i tabellen och därför kommer sökningar som görs mot index alltid att vara snabbare än en genomsökning av hela tabellen (table scan). Beroende på hur mycket data som finns i tabellen och hur detta är distribuerat kan sökningarna ske mer eller mindre fort, men är det fråga om miljoner rader är en faktor på 10 inga orimligheter på skillnaderna mellan en index scan och en table scan.
Beroende på vad för databas man använder kan man skapa index på olika sätt, ska man göra det med SQL är en bra början
, sedan skiljer sig syntaxen åt beroende på RDBMS. I SQL server management studio finns det GUI-stöd för att skapa index på en eller flera kolumner i en tabell.
Det du har presenterat är inte en databas. det är möjligen en tabell i en databas. Det som är intressant att indexera i den där tabellen är ju ditt WHERE-villkor, dvs
är en lämplig kandidat att indexera. Hur detta görs beror som sagt på vad för RDBMS du kör.
För att se skillnaderna på sökningar med eller utan index blir man tvungen att ta till andra verktyg, i sql server kan man exempelvis i management studio välja show actual execution plan (eller estimated execution plan) för att se hur query optimizern tänkt sig att exekvera frågan.
I mysql borde EXPLAIN framför själva frågan ge dig samma effekt, om än presenterat lite annorlunda. SQL server har ju även sql server profiler att ta till där man kan kolla exekveringstid etc för de frågor som körs i databasen.
Normalt sett skapas även ett automagiskt index på en tabell om man i densamma har en primärnyckel definierad.