8

在存储过程中使用准备好的语句时,是否应该在过程结束时释放它们,或者无关紧要,为什么?

一些代码来解释:

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 语句是否应该存在?干杯!

/胜利者

4

3 回答 3

8

根据MySQL 文档

准备好的语句特定于创建它的会话。如果您终止会话而不释放先前准备的语句,则服务器会自动释放它。

所以,不,我不会明确地这样做,除非你有非常长时间运行的会话。

于 2009-07-22T12:36:42.033 回答
1

如果您使用连接池,释放它们绝对是一个好主意。

于 2009-08-15T04:19:59.380 回答
0

在存储的例程中释放准备好的语句是最佳实践。

Prepared statements are global to a session and are not automatically deallocated when a stored routine ends.

If you have too many created but not deallocated prepared statement, you might encounter/exceed the max_prepared_stmt_count limit

于 2021-07-04T23:30:51.507 回答