Just nu i M3-nätverket
Jump to content

stora databaser


olle9

Recommended Posts

jag har en 250 mb stor databas (ms sql-server), som endast innehåller en tabell. tabellen innehåller besöksstatistik, så det har blivit en del rader. problemet är att det går oerhört långsamt att läsa från databasen, ibland ger sql-servern time out. jag tycker det är konstigt, då jag har fått för mig att sql-servern ska klara väldigt stora databaser. kan någon ge mig några råd för att "snabba upp" databasen.

Link to comment
Share on other sites

Databasen innehåller statistik med en rad för varje inladdning på servern.

 

Min fråga ser ut så här:

 

SQL = "SELECT target,count(*),count(distinct ClientHost) FROM " & strTbl & " WHERE target LIKE '%.asp' OR target LIKE '%.htm' OR target LIKE '%.html' GROUP BY target ORDER BY count(*) DESC"

 

Kolummerna:

target 'sidan som laddats in

client host 'besökarens ip

 

resultatet blir, tex:

 

SIDA|BESÖK|UNIKA BESÖK

 

index.asp|8000|3000

sida1.asp|6000|2000

sida2.asp|1000|5000

 

osv...

 

Link to comment
Share on other sites

Jag använder inte MS Sql-server själv, så exakt hur man går tillväga för att skapa index vet jag inte, men det finns säkert andra här som vet. Det borde kunna ge någon förbättring tycker jag.

 

Link to comment
Share on other sites

Hur gjorde du det.

 

Din SQL sats borde inte hjälpas ett dugg av din indexering (iallafall som jag fattat det)

 

LIKE '%.asp' OR target LIKE '%.htm' OR target LIKE '%.html' 

 

om du gör en indexering på target, så kommer SQL Server skapa ett register över alla "namn" i target, alltså om det finns något i target som heter "Erik" och du söker på det "target = 'erik'" så kan SQL Servern hoppa direkt till Erik, utan att först kolla genom alla namn innan erik. jämför telefonkatalogen.

 

Men om du gör '%erik' så är ju första bokstaven/bokstäverna okända, vilket borde resultera i att du inte är hjälpt av något index, eftersom man ändå måste gå igenom ALLA poster för att kolla efter strängen 'erik' i posten.

 

Men om det är som du säger att det hjälpet att lägga ett index på kolumnen Target, så har jag fattat noll.

 

KAN INGEN FÖRKLARA FÖR MIG.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

*phuuu*

 

Tråkigt för din del, men det betyder att jag inte ljugit för en massa folk, så jag känner mig lite lättad.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Jag kom dock på en liten lösning på ditt problem, och det blir att du skapar en extra kolumn i din databas och där i spara extension på filerna.

 

Alltså: asp, htm,html,gif,jpg osv osv..

 

Nu vet jag inte om det är du själv som matar i det i databasen eller om det är IIS som gör det, om det är IIS så blir det lite svårt, då måste du lägga en trigger på den tabellen, och det kan slöa ner insätningen av data, behöver dock inte göra det, men kan.

 

Men om det är du själv så är det bara att plocka ut extension på filnamnet och lägga i den nya kolumnen, sedan så säker du mot den, vilken du kan indexera och göra så det gå foratare, plus att du inte behöver använda LIKE vilket också kommer att öka prestandan lite.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

MattiasCanberger

Du kan tjäna prestanda genom att skapa ett ickeklustrat (eller klustrat men behövs egentligen inte) index på kolumnerna Target och ClientHost.

 

Detta index blir ett så kallat täckande index. Dvs alla kolumner som du har med i frågan finns med i indexet. Detta gör att SQL server enbart behöver besöka ditt index för att kunna svara på frågan. Fördelen med detta är att eftersom det bara finns två kolumner i indexet så ryms det fler rader per page och SQL servern behöver därför göra färre fysiska läsningar jämfört med att scanna tabellen.

 

Även om inte indexet gör nytta som ett index så kommer det med största sannolikhet att göra din fråga snabbare.

 

/Mattias

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...