23. juni 2003 - 13:47Der er
16 kommentarer og 1 løsning
SQL Sætning timer altid ud nu!!
Hej,
denne SQL sætning som jeg har kørt i flere år nu uden problemer er lige pludselig stoppet helt med at virke! Den timer bare ud...
her er den:
SELECT c.membername, c.status, m.power, m.lastvisit, c.rgive, c.id, c.job FROM clans_members as c, members as m WHERE c.membername = m.membername AND c.clanid = 300 AND c.status <> 2 ORDER BY m.power DESC
ikke den vildeste sætning, men den burde da ikke time ud :s Selv hvis jeg prøver i query analyzer sker der ikke noget! Der kommer ingen resultater whatsoever. Sætningen burde bare skrive max 20 linier ud... ikke særligt meget, og en sætning som blev kørt tusindevis af gange om dagen.
Hvis i kan hjælpe mig er der massere points at give af... ethvert hint vil være til hjælp.
serveren er ret belastet... men ikke mere end normalt. I clans_members er der en 5,000 poster, og lidt over 20,000 poster i members. Ikke særligt meget...
Jeg lavede før denne fejl kom en mindre ændring i tabellen members, nemlig at jeg satte et nvarchar felt til 500 i stedet for 255... det er et felt som slet ikke bliver selected her. Jeg kan ikke rigtigt forestille mig at det er det som gør forskellen :s
damn, der er alt for meget at poste :s i members er der vel en 50+ felter.
der er index på membername i members, men ingen indexes i clans_members... det er ikke den her type sætninger som bliver kørt oftest på min server, derfor er indexes ikke optimeret til netop den her. Alt andet på serveren virker nemlig perfekt; alle andre queries som tager fat i de to tabeller virker.
Mens jeg skriver det her har query analyzer arbejdet på at køre sætningen... den er lige blevet færdig, og fik faktisk de rigtige resultater - bare efter mange minutter! Er der noget af de info som den har skrevet ud, som du kan bruge? Jeg har aldrig brugt query analyzer før, så ved ikke om noget af det kan hjælpe :s
lavede kun index på membername og clanid i clans_members - og nu virker det!!!
det er lidt langsomt - men det virker.
Kan du fortælle mig HVORFOR, og eventuelt hvad der kan gøres for at få det til at gå lidt hurtigere? Indexes bruges så vidt jeg husker normalt kun for at gøre søgning i felterne nemmere... derfor vil et index på power og status vel ikke gøre en forskel, da der ALDRIG søges på deres værdi!?
Du søger på power og status gennem din where-betingelse.
Jeg vil anbefale dig en bog at læse: Ken England: Microsfot SQL Server 2000 Performance Optimization and Tuning Handbook (ISBN: 1-55558-241-9). Den indeholder en god gennemgang af den måde, Query Optimizeren i SQL Server arbejder på. Desuden giver den god gennemgang af den måde, data lagres samt den måde indeks er bygget op.
der er stadig en 15 gigabytes ledig... databasen er *kun* 2 gigs eller deromkring. Så jeg tror ikke pladsen er problemet :s
Synes godt om
Slettet bruger
24. juni 2003 - 19:10#17
OK, var også bare et forslag :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.