Confronto delle prestazioni di MySQL tra Stored Procedure e Prepared Statements
-
28-10-2019 - |
Domanda
Ecco la dichiarazione preparata da MySQL
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`;
e procedura di archiviazione equivalente
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;
Dopo aver eseguito la query, entrambi restituiscono gli stessi risultati.
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
)
)
Osservo attentamente il tempo di esecuzione, entrambi sono uguali.Quando e dove uno è migliore e più veloce di un altro?
Soluzione
"Più veloce" e "migliore" non sono necessariamente allineati.Consulta questo recente simile Quindi domanda e considera questi attributi di una soluzione:
- gestibile (leggibile, requisiti di abilità - chi può lavorare su questo codice)
- testabile
- rilasciabile
- flessibile
- portatile
In generale, le procedure memorizzate sono più veloci, ma falliscono su ogni altra metrica.
Altri suggerimenti
Penso che nel tuo caso non abbia importanza se esegui la query in modo autonomo o come parte di una procedura memorizzata.Una procedura è utile in situazioni in cui è necessario eseguire un batch di query.Pertanto, per la tua query è meglio eseguire autonomamente.