phpbar.de logo

Mailinglisten-Archive

[php] Ausführungszeit von MySQL-Abfragen

[php] Ausführungszeit von MySQL-Abfragen

Sven Muhle s.muhle at ephilos.de
Mi Dez 22 10:01:41 CET 2010


Moin Moin,

MySQL hängt normalerweise an jeden SELECT ein "LIMIT 0,30" ran.

Gruß
Sven


-----Ursprüngliche Nachricht-----
Von: php-bounces at phpbar.de im Auftrag von Hans Egg
Gesendet: Mi 22.12.2010 06:33
An: deutschsprachige PHP-Mailingliste
Betreff: Re: [php] Ausführungszeit von MySQL-Abfragen
 
Moin, moin

Am 21.12.2010 um 18:16 schrieb Mathias Gloß (www.gmail.com):

> wenn die Abfrage auf dem gleichen System einmal 0,6 und einmal 6 Sekunden
> dauert, dann könnte ich mir das nur so erklären, daß unterschiedliche
> selects zum Einsatz kommen - und der, der länger dauert suboptimal
> formuliert ist.

Es sind die gleichen. Ich kopiere das vom Skript erzeugte SQL-Statement und füge es bei PHPMyAdmin ein.

> Kannst du mal den select-Befehl von phpMyAdmin (sollte da angezeigt werden)
> und den von deinem Programm posten?

SELECT g.uid AS id, g.url_name, g.restaurant_name AS real_name,
g.adresse_1 AS address, g.plz AS zip, g.ort AS city, gaultmillau, 
	tx_lgmapconnector_latitude AS latitude, tx_lgmapconnector_longitude AS longitude, '' AS distance,
(SELECT COUNT(*) FROM tx_hegastro_schedule s WHERE s.date = '2010-12-21' AND s.status = '1' 
	AND (s.gastro_id = g.uid OR s.gastro_id = g.show_menus_from)) AS has_menus,
(SELECT COUNT(*) FROM tx_hegastro_schedule s INNER JOIN tx_hegastro_menus m ON s.menu_id = m.menu_id 
	WHERE s.date = '1111-11-11' AND s.status = '1' AND (m.restaurant_id = g.uid OR m.restaurant_id = g.show_menus_from)) AS has_spec,
(SELECT pano_id FROM tx_hegastro_panorama p WHERE p.restaurant_id = g.uid AND p.pano_status = 'SUCCESS' 
	AND DATE_ADD(p.upload_time, INTERVAL 1 DAY) < CURRENT_TIMESTAMP ORDER BY p.position LIMIT 1) as first_pano,
(SELECT filename FROM tx_hegastro_media m WHERE m.gastro_id = g.uid AND m.type = 'IMAGE' ORDER BY m.position LIMIT 1) as first_image
FROM tx_nbgastro g
WHERE g.deleted = 0 
AND g.hidden = 0
AND g.showlive = 1
ORDER BY real_name

Ich weiß, dass die Subselects die Performancekiller sind. Jeder von ihnen braucht ein paar Millisekunden. Ich werde auch dafür sorgen, dass die Ergebnisse der Subselects statisch verfügbar sind und von der Applikation aktuell gehalten werden. 

Die Frage bleibt, was PHPMyAdmin anders macht, damit diese Abfrage 10x schneller ausgeführt wird als durch mein Skript.

Einen schönen Tag wünsche ich allerseits.
Gruß, Hans
-- 
** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de **
Informationen: http://www.phpbar.de
http://lists.phpbar.de/mailman/listinfo/php


php::bar PHP Wiki   -   Listenarchive