04. august 2008 - 10:03Der er
11 kommentarer og 1 løsning
Performance og selects
Hej
Jeg ved ikke ret meget på performance fronten mht. mysql, så derfor har jeg lige et par spørgsmål. Pt har jeg en pristabel hvor jeg først har x mål samt y mål og ud fra disse bliver tabellen dannet. Derefter bliver prisen hentet via en funktion hvor i at højden og bredden udgør de faktorer der finder prisen ud fra funktionen.
Et meget simpelt eksempel.
--- 600 700 800 900 600 700 800 900
Funktionen er således at der hentes på fx 600x600 og retuneres en pris. Dette medfører således at der faktisk hentes 16 gange fra databasen ud over når tabellen oprettes, og til dette køres to selects (til en array med x værdierne samt en til y værdierne).
Et udsnit af databasen ser således ud: ID, x, y, pris 1, 600, 600, 1100 2, 600, 700, 1200 3, 600, 800, 1300 4, 600, 900, 1400 5, 700, 600, 1200 6, 700, 700, 1300 mv...
Bemærk i øvrigt at tabellens størrelse er variabel og kan være på op til 2000.
Dette har fungeret rigtig fint til dato, men jeg har svært ved at tro at det er en helt god måde at gøre det på, eller?!?
Det kommer sig af, at der snarres vil være en meget stor aktivitet på siden og et anslået tal vil ca. være 15.000 - 25.000 unikke besøgende om mdr.
Spørgsmålet er således om det er intet problem for mysql serveren at tabellen udføres som ovenstående, eller om der er en bedre løsning?!?
Og rent performance mæssigt, hvor meget betyder det med flere selects pr. side?!? Jeg har lavet en del joins, men jeg ligger alligevel på lidt under 10 selects på en af de sider hvor det virkelig går hæftigt for sig + ovenstående tabel. Er dette helt skidt?!?
20.000 om måneden er 1.000 om dagen fordelt på 8 timer: 125 i timen, ca. 2 i minuttet. Det er i sig selv ingenting, selv om de ikke fordeler sig så jævnt.
Men derfor skal vi da har gjort forespørgslen så hurtig som rimeligt muligt.
Jeg kan ikke se hvad din forløkke gør godt for. Som du skriver den, kan du li'så godt:
strPris = getPrice(600,600); for i=1 to 16 { ....noget med strPris... }
Hele scriptet foregår i ASP, men det er jo en helt anden diskussion :)
Ydermere er dette en MEGET lille tabel og de fleste tabeller ligger på 15x10.
Du har naturligvis ret i at det ca. er 2 pr. minut, men det er unikke besøgende, samt at dette fungere som en del af et produktkatalog hvor at dette script køres hver eneste gang der vises et produkt, så det giver forhåbentlig lidt mere end blot to forespørgsler pr. minut :)
SELECT ... FROM ... WHERE x IN (600,700,800,900) AND y IN (600,700,800,900)
Så har du een forespørgsel, der giver 16 rækker, og det er i hvert fald hurtigere end 16. Du må så gemme det hentede i et array eller lignende i ASP, dvs. formentlig i VBScript.
Det er så måske lidt bøvlet i VBScript... Tænk engang - er der stadig nogen, der bruger gammeldags ASP?
Synes godt om
Slettet bruger
04. august 2008 - 13:38#7
Tja, bruger gammeldags ASP.
Jeg har nu fået kogt det hele ned til en select ved brugt af lidt ASP.
Men mit spørgsmål går stadig lidt på, om det er for meget at have noget der ligner måske 10 selects på en side?!? Der er tale om standard selects samt order by.
Som udgangspunkt er det ikke for meget. Du kan som her måske gøre noget hurtigere ved at kigge lidt på det, og ved at tænke i fx indexer, og du kan (bør?) lave en balastningstest af systemet, så du ved hvad det kan holde til.
Synes godt om
Slettet bruger
04. august 2008 - 14:02#10
For meget er; hvis der er mærkbar ventetid :)
Men det glæder mig at høre, at det som udgangspunkt ikke er for meget. De SQL sætninger jeg bruger er på ingen måde avanceret.
Men som du er inde på erikjacobsen, så er jeg også ved at gennemgå alle koderne for at gøre dem bedre. Men forefindes et evt. belastningstest system allerede, eller er det blot at lave et selv?!?
I må i øvrigt gerne lave svar, for jeg tror at jeg er ved at være ved ende ved dette spørgsmål.
Der er flere belastningsprogrammer derude - også Microsoft har lavet et. Men det sidste jeg har brugt med fornøjelse er: http://curl-loader.sourceforge.net/ - det afvikles på en linux maskine, men kan selvfølgelig test ASP-sider også ;)
Om der er mærkbar ventetid, kan du vel se ved at gå ind på siden. :o)
Men selvfølgelig; hvis du har 13.000.000 poster, kan det da godt være, at en enkel linje SQL vil kræve en lille smule ventetid. :) Så derfor er det da altid at foretrække at holde sine SQl-sætninger så simple som muligt og undgå at have for mange af dem.
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.