Jag har en tabell med 250 miljoner rader. Den har ett klustrat index som är sorterad på tid (det är en tabell med värden som söks på bla tid). Jag bygger om indexet varje natt. Vad är det för datatyp på ditt klustrade index? Det är datetime. Du ska <b>absolut</b> lägga upp index på dom kolumner som du använder i JOIN och WHERE uttryck. Ah, på instrumenttyp och nr har jag redan ett index. :-) ...mmmm ok ...Stor andel av icke-indexerad data
Det går bra att öppna en rapport som är på flera dagar och veckor (det är ett värde varannan minut). Det går också bra att öppna en rapport som är på 30 minuter som då inte innehåller mer än 15 värden.
Det går också bra att öppna en rapport för det senaste dygnet (då större delen av värdena inte är indexerade). _Men_ det går inte bra att öppna en rapport som består av bara icke-indexerade värden.
Hur kan det komma sig?Sv: Stor andel av icke-indexerad data
Har du andra icke klustrade index på tabellen?
Om du inte har andra index, lär du behöva det.
Är databasen i drift (används) den när du bygger om den?
I vilket återställningsläge (recovery model) är den när du bygger om?
Är logg filen stor?Sv:Stor andel av icke-indexerad data
Jag har bara index på tiden. Jag inner joinar mycket på instrumenttyp och instrumentnummer så jag borde nog lägga upp index på dom kolumnerna också
Databasen är online när den kör index men det är låganvändning (änsålänge, vi börjar få kunde i Latin America).
Databas_LOG.LDF är på 16 GB. Databasen på 50 GB.Sv: Stor andel av icke-indexerad data
Som du nämnde, instrumenttyp och instrumentnummer.
Om du i samma fråga där du joinar ovanstående kolumner också hämtar ut data från andra kolumner från tabellen (I SELECTen), så lägger du dom som INCLUDE kolumner i indexet som du bygger.
(Gäller inte kolumner som du har som key kolumner i indexet, eller kolumnen/er som du har har klustrat index på)
När det gäller key kolumner så lägger du den kolumn som har "störst" selektivitet överst, sedan nästa osv.
När du bygger om indexen sätt recovery model till SIMPLE (om den inte redan är det) sedan sätter du tillbaka den till FULL.
Behöver du verkligen göra detta varje dag?
Kör backup av loggen med truncate för att komprimera/truncera den.
Kör sedan shrink på databasen.Sv:Stor andel av icke-indexerad data
Och vi kör på Simple hela tiden.
Jag ska testa att truncate loggen efter back up och shrink på databasen. Återkommer.Sv: Stor andel av icke-indexerad data
Såg du vad jag skrev om index?
Du har ju index på instrumenttyp och instrumentnummer.
Läser du ut andra kolumner från samma tabell i samma fråga som du använder dom?
T.ex.
Du har index på instrumenttyp och instrumentnummer.
Om du då tex skriver
SELECT
instrumentnamn
FROM instrumenttabellen
WHERE (instrumenttyp = 1) och (instrumentnummer = 10);
Så ska du lägga till instrumentnamn till det indexet, som en INCLUDED kolumn.
Detta för att slippa sk. Bookmark lookups (kostsamma).