如果我没记错的话,prepared statements 会更快,因为它们只是第一次发送到 RDBMS,然后只有在需要执行时才发送参数。
在使用 Doctrine2 的 DBAL 时,我应该总是使用准备好的语句,还是只在瓶颈中使用?我可以拥有的准备好的语句的数量是否有限制?
Doctrine2 的 ORM 呢?它是默认使用普通查询还是使用准备好的语句?
如果我没记错的话,prepared statements 会更快,因为它们只是第一次发送到 RDBMS,然后只有在需要执行时才发送参数。
在使用 Doctrine2 的 DBAL 时,我应该总是使用准备好的语句,还是只在瓶颈中使用?我可以拥有的准备好的语句的数量是否有限制?
Doctrine2 的 ORM 呢?它是默认使用普通查询还是使用准备好的语句?
关于性能,几乎不会出现一个脚本多次运行查询的情况。因此,准备好的语句“更快”的好处几乎不存在。
准备好的语句不允许 SQL 注入的好处也不是很正确。准备好的语句在动态查询的可能性方面有一些限制,它们本身并不抗注入。你可以少做坏事,但不能为零。
每当尝试优化事物时:测量。并首先优化正确的东西。例如,如果你有一个慢查询,你应该首先检查它的执行计划,看看是否所有的索引都被正确使用。从非准备语句切换到准备语句不会有太大变化。
建议始终对所有数据库服务器使用准备好的(或至少参数化的)语句,这不仅是为了提高速度,还因为它有助于防止 SQL 注入攻击。