Hej! Frågan är väl egentligen om det är SQL-frågan som gör att det tar lång tid eller om det är din kod som bör optimeras. "Har hört av andra att jag bör ha SQL-servern på en egen dator... vad tycker ni ?" Eftersom du använder 'ORDER BY' och ett en massa sökvillkor så antar jag att du verkligen har rätt index satta på de tabellerna och fälten. Hur menar du??? Rätt index är väldigt viktigt att ha om man bryr sig om prestanda. Posta tabelldefinitionerna så kan du nog få hjälp med detta. Använd index på de kolumner du har i WHERE och ORDER BY satserna Så här ser det ut... En otroligt viktig sak är att inte använda datatypen Text om den inte behövs. Använd istället Varchar och begränsa maxlängden. Text-kolumner lagras fysiskt inte i direkt anslutning till övriga data i tabellen, utan som pekare. Detta gör att utsökningar mot sådana tabeller/kolumner tar väldigt lång tid. Om du ändå måste använda Text, bryt ut dessa kolumner till en egen tabell och hämta data från den endast vid behov. Jag tror att det skulle göra underverk för prestandan. Nu tycker jag du säger galna saker, text går utmärkt till i de flesta fallen men ska man söka i de fälten så SKA man använda FTS (Full Text Search), blir prestandan rätt fin faktiskt. Som sagt... Index hjälper ganska mycket... <info>Sen använder jag gamla ADODB... (eller vad det nu heter)... för det är lättare att använda .PageCount <b>>PS. Vad ska jag skriva för att få ett citat? Eller finns det inget specialkommando för det? DS.</b>Optimering av SQL-sats
Idag har jag ett forum som funkar bra... men tar väligt lång tid att surfa på när det är mycket
besökare på sidan, jag gjort forumet i Visual Studio.NET (VB) och kör databasen på samma dator
(SQL)
Databas-tabellen som forumet ligger i har idag 88668st poster (trådar+svar)
Hur kommer det sig att det tar så lång(?) tid att göra en sökning i databasen?
Om jag skriver:
SELECT * FROM Forum WHERE FID = 1 ORDER BY Häftat, Datum DESC
Så tar det ganska lång tid.... och vi ska inte tala om när jag skriver så här:
SELECT * FROM Forum WHERE Text Like '%Sök-text%' ORDER BY Datum
När det är runt 20 besökare på sidan ligger min cpu-usage nästan konstant på 100%... det är SQL-servern
som jobbar mest...
Jag har även gjort TOP 200 för att begränsa lite....
Någon som har tips?.... idag kör jag Windows 2003 Swerver... och allt ligger på samma dator..
det är en P4 2,7Ghz, 2gig ram...
Har hört av andra att jag bör ha SQL-servern på en egen dator... vad tycker ni ?
Sidan har c.a. 1000 besökare / dag... (c.a. 500 unika besökare)
Den här sidan (Pellesoft.se) flyter 100000 gånger bättre... =)... hur görs sökningarna i forumet här?
Min sida: www.x40nordic.com
Tack på förhand....
Mvh
Johan.NETSv: Optimering av SQL-sats
Har du provat SQL-frågorna direkt i databasen?
Hur ser dina DB-anrop ut?
Men en sak i SQL-frågan är att du inte använder * utan skriver ut de kolumner du ska ha.
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Optimering av SQL-sats
- Om du har möjlighet till detta är det absolut att föredra! Din prestanda är det inget fel på, men har du möjlighet att stoppa i en processor till är detta ingen nackdel.
"SELECT * FROM Forum WHERE FID = 1 ORDER BY Häftat, Datum DESC"
"SELECT * FROM Forum WHERE Text Like '%Sök-text%' ORDER BY Datum"
- Att använda '*' i sina SELECT satser är no-no. Specificera de enskilda fältnamnen du behöver. Oftast behöver man inte alla ändå.
- Använd Stored Procedures i stället för inline SQL satser. Alltid snabbare (om de är rätt skivna)
- SQL Profiler är ett utmärkt verktyg för att hålla koll på vilka flaskhalser som finns. Använd den.
- Kolla Asp.Net forum applikationen. Den är gratis.Sv: Optimering av SQL-sats
Sv: Optimering av SQL-sats
Jag har en ID tabell som är "nyckel"... det är det enda jag känner till...
till er andra så var jag lite otydlig... jag brukar inte skriva *.. utan anger de columner jag vill ha...
Sen använder jag gamla ADODB... (eller vad det nu heter)... för det är lättare att använda .PageCount
och .AbsolutPage... när jag har listor med data... och vill dela upp det...
Få här ser en function ut.... som jag brukar använda mig av (exempel)...
Public Sub Exempel()
Dim MyConn As New Object()
Dim MyRS As New Object()
Dim SQLSats As String
MyConn = CreateObject("ADODB.Connection")
MyRS = CreateObject("ADODB.Recordset")
MyConn.CursorLocation = 2
MyConn.Open(ConnSTR)
MyRS.CursorLocation = 2
SQLSats = "SELECT"
MyRS.Open(SQLSats, MyConn, 3, 3)
Do Until MyRS.Eof
MyRS.MoveNext()
Loop
MyRS.Close()
MyConn.Close()
MyRS = Nothing
MyConn = Nothing
End Sub
Hoppas någon kan hjälpa mig så jag gjort allt rätt när jag skapat databastabellerna....
Jätte stort tack om ni vill hjälpa mig.... =)
Mvh
Johan.NETSv: Optimering av SQL-sats
Att använda TOP, t.ex. TOP 200, spelar ingen som helst roll, precis som du är inne på. SQL Server måste ända göra hela sökningen. TOP innebär endast en begränsning av resultatmängden.Sv: Optimering av SQL-sats
Använd också Index Tuning Wizard i Query AnalysernSv: Optimering av SQL-sats
Ska man göra på något annat sett... ??
http://www.x40nordic.com/sql_table.jpg
Mvh
Johan.NETSv: Optimering av SQL-sats
/PKSv: Optimering av SQL-sats
Att lägga alla index rätt kan dock vara ett problem, börja med att lägga index på de fälten du använder mest för att avgränsa datamängderna (såvida det inte är ett text-fält). Ett exempel på ett bra avgränsande index är gissningsvis TopicID. Om du är tveksam så kolla på de sql-frågor du använder, gör du direkta avgränsingar mot ett specifikt fält så är det värt att indexera i de flesta fall.Sv: Optimering av SQL-sats
Ett exempel.. Jag har en tabell i en databas med ca: 600 000 poster, i en stored procedure slår jag upp ganska mycket från den och utan index tog stored proceduren 72 sekunder, efter att jag indexerade den smidigt så tar den under 2 sek..
Problemet med index är att det tar längre tid att skriva till tabellen, index måste byggas upp och om man kör flera större inserts i rad kan det ta mycket längre tid, ett tips (om så är fallet) kan vara att innan man lägger in mycket data, ta bort indexen och när man är färdig lägga in dem igen.. Sen om detta är rätt sätt att göra det vet jag inte men det funkar..Sv: Optimering av SQL-sats
och .AbsolutPage... när jag har listor med data... och vill dela upp det... </info>
Du skriver att du bygger i VB.NET och ändå så använder du ADODB?
Om du nu verkligen vill optimera så ska du nog ta en titt på ADO.NET. Som det är nu så blandar du gamla och nya tankesätt, det är därför du tycker att det är "lättare" med ADODB. Glöm gamla ASP och vad du gjorde där. .NET är objekt-orienterat och man måste börja med att tänka om helt och sätta sig in i allt vad .NET kan göra.
Du ska se att det får upp farten en del.
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Optimering av SQL-sats
Nope, men du kanske kan skriva < info >?
<info>PS. Vad ska jag skriva för att få ett citat? Eller finns det inget specialkommando för det? DS.</info>