webForumDet fria alternativet

Skicka flera st sql frågor till mysql samtidigt

PHP

7 svar · 631 visningar · startad av yador

Medlem sedan mars 2004455 inlägg
Frågan#1

Hejsan!
Kan man skicka in flera st sql frågor till mysql samtidigt via någon funktion i php? Just nu har jag nämligen en efter en, men att anropa mysql massor gånger i rad känns som man förlorar onödig prestanda då den måste anropas flera gånger. Det vore ju bättre om man på direkten kunde skicka in alla frågor på en rad och sedan få tillbaka t.ex resultatet via en array.

Tack på förhand!

Medlem sedan feb. 20011 198 inlägg
#2

Går det inte om du avgränsar frågorna med ; och sen lista igenom recordseten?

Det går med MSSQL och ASP.

Medlem sedan aug. 2004903 inlägg
#3

Det kanske är UNION du söker?

UNION is used to combine the result from multiple SELECT statements into a single result set.

http://dev.mysql.com/doc/refman/5.0/en/union.html

Medlem sedan mars 2004455 inlägg
#4

Jag hittade http://se.php.net/manual/en/mysqli.multi-query.php som verkar göra det jag vill precis :) Undrar bara en sak, vet någon hur stor prestanda ökning det egentligen är? Förstår att det beror på hur många frågor man ska ställa till databasen, men om vi säger att det är 10 st, hur mycket snabbare är då denna funktionen mot att ställa enbart vanliga frågor via mysqli->query()?

Medlem sedan jan. 20023 327 inlägg
#5

Stored Procedures är ju också ett alternativ. Har dock inte så bra koll på hur bra mySQL hanterar det gällande prestanda.

Medlem sedan nov. 200373 inlägg
#6

Hur ser din applikation ut? Är det samma fråga som skickas flera gånger eller är det en rad olika frågor? Om det är olika så tror jag inte du har så mycket att vinna på att slå ihop och skicka flera stycken samtidigt. Det ser bara illa ut i koden. Det är väl att öppna själva databasanslutningen som kan ta tid så se till att du bara gör det en gång.
Prepared statements är snabbare om det är samma fråga (med olika parametrar) som ska skickas upprepade gånger: http://se2.php.net/manual/en/pdo.prepare.php

Om du har enskilda frågor som tar väldigt lång tid kan du antingen försöka optimera sql frågan, se över dina index i databasen eller cacha resultatet så att den inte behöver anropa databasen överhuvudtaget.

Medlem sedan mars 2004455 inlägg
#7

Stored Procedures verkar intressant, ska kolla lite vidare på det :)

pulse
Det är för det mesta samma frågor, men med olika parametrar. Det med prepared statements kan jag också kolla upp vidare. Jag vet att jag cacha resultatet, men via min personliga smak så vill jag ha ny färsk data :)

Jag tackar för all hjälp, jag accepterar mitt föregående inlägg som slutgiltigt svar.

Medlem sedan mars 20041 505 inlägg
#8

yador skrev:

Undrar bara en sak, vet någon hur stor prestanda ökning det egentligen är? Förstår att det beror på hur många frågor man ska ställa till databasen, men om vi säger att det är 10 st, hur mycket snabbare är då denna funktionen mot att ställa enbart vanliga frågor via mysqli->query()?

Frågorna körs ju oavsett om du skickar 10 st. query() eller ett enda anrop.
Så jag ser ingen mening med det. Men visst, du kanske sparar några byte i bandbredd mellan webbservern och sql-servern, men vinsten är nog obefintlig.

274 ms totalt · 3 externa anrop · v20260731065814-full.f363f448
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)