Comparaison des performances MySQL entre la procédure stockée et les déclarations préparées
-
28-10-2019 - |
Question
Voici la déclaration préparée de 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`;
et procédure de magasin équivalent
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;
Après avoir exécuté la requête, les deux résultats des mêmes résultats.
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
)
)
Je regarde de près le temps d'exécution, les deux sont les mêmes. Quand et où est meilleur et plus rapide qu'un autre?
La solution
"Plus vite" et "mieux" ne sont pas nécessairement alignés. S'il te plait regarde Cette similitude récente Alors questionnez, et considérez ces attributs d'une solution:
- maintenable (lisible, exigences de compétences - qui peut travailler sur ce code)
- testable
- relemable
- flexible
- portable
D'une manière générale, les procédures stockées sont plus rapides, mais échouent sur toutes les autres métriques.
Autres conseils
Je pense que dans votre cas, peu importe si vous exécutez la requête autonome ou dans le cadre de la procédure stockée. Une procédure est agréable dans des situations où vous avez un lot de requête à effectuer. Par conséquent, pour votre requête, il est préférable de fonctionner autonome.