在存储过程中使用预准备语句时,是否应该在程序结束时取消分配,或者无关紧要,为什么?
解释一些代码:
CREATE PROCEDURE getCompanyByName (IN name VARCHAR(100))
NOT DETERMINISTIC
BEGIN
PREPARE gcbnStatement FROM 'SELECT * FROM Companies WHERE name=? LIMIT 1';
SET @companyName = name;
EXECUTE gcbnStatement USING @companyName;
DEALLOCATE PREPARE gcbnStatement;
END $$
那么 - DEALLOCATE语句应该存在吗?干杯!
/维克多
答案 0 :(得分:6)
答案 1 :(得分:1)
如果您使用连接池,那么取消分配它们肯定是个好主意。
答案 2 :(得分:0)
我也遇到了同样的问题,在文档中提到了
A prepared statement is also global to the session. If you create a prepared statement within a stored routine, it is not deallocated when the stored routine ends.
我起初以为这意味着应该明确地释放它。
但事实并非如此。
答案 3 :(得分:0)
在存储例程中释放准备好的语句是最佳实践。
准备好的语句对会话来说是全局的,并且不会在存储的例程结束时自动释放。
如果您有太多已创建但未释放的准备好的语句,您可能会遇到/超过 max_prepared_stmt_count 限制