MySQL-Leistungsvergleich zwischen gespeicherter Prozedur und vorbereiteten Anweisungen
-
28-10-2019 - |
Frage
Hier ist die von MySQL vorbereitete Anweisung
SELECT
ag.`attendance_type`,
ag.`description`,
COUNT(a.`attendance`) attendance_count
FROM
`ems_attendance` a
RIGHT JOIN `ems_att_group` ag
ON ag.`id` = a.`attendance`
AND a.`added_date` BETWEEN '2011-06-01'
AND '2011-06-17'
AND a.`users_id` = '9'
GROUP BY a.`attendance`
ORDER BY ag.`id`;
und gleichwertige Speicherprozedur
DELIMITER $$
DROP PROCEDURE IF EXISTS `users_attendance_report` $$
CREATE PROCEDURE `users_attendance_report` (
IN users_id INT,
IN start_date DATE,
IN end_date DATE
)
BEGIN
SELECT
ag.`attendance_type`,
ag.`description`,
COUNT(a.`attendance`) attendance_count
FROM
`ems_attendance` a
RIGHT JOIN `ems_att_group` ag
ON ag.`id` = a.`attendance`
AND a.`added_date` BETWEEN start_date
AND end_date
AND a.`users_id` = users_id
GROUP BY a.`attendance`
ORDER BY ag.`id` ;
END $$
DELIMITER;
Nachdem ich die Abfrage ausgeführt habe, geben beide die gleichen Ergebnisse aus.
Array
(
[0] => stdClass Object
(
[attendance_type] => present
[description] => Present
[attendance_count] => 10
)
[1] => stdClass Object
(
[attendance_type] => absent
[description] => Absent
[attendance_count] => 2
)
[2] => stdClass Object
(
[attendance_type] => other
[description] => Other
[attendance_count] => 0
)
[3] => stdClass Object
(
[attendance_type] => dayoff
[description] => Day Off
[attendance_count] => 2
)
)
Ich schaue mir die Ausführungszeit genau an, beide sind gleich.Wann und wo ist einer besser und schneller als der andere?
Lösung
"Schneller" und "besser" sind nicht unbedingt aufeinander abgestimmt.Weitere Informationen finden Sie unter in letzter Zeit ähnlich SO fragen Sie und betrachten Sie diese Attribute einer Lösung:
Andere Tipps
Ich denke, in Ihrem Fall spielt es keine Rolle, ob Sie die Abfrage eigenständig oder als Teil einer gespeicherten Prozedur ausführen.Eine Prozedur ist in Situationen hilfreich, in denen Sie einen Abfragestapel ausführen müssen.Daher ist es für Ihre Abfrage am besten, eigenständig auszuführen.