Sql server 使用cfqueryparam创建准备好的语句的条件?
只要有1个Sql server 使用cfqueryparam创建准备好的语句的条件?,sql-server,jdbc,coldfusion,prepared-statement,Sql Server,Jdbc,Coldfusion,Prepared Statement,只要有1个cfqueryparam,那么cfquery是否就成为一个准备好的语句?还是有其他条件 当orderby子句或FROM子句是动态的时会发生什么?每一个独特的组合都会成为一份事先准备好的声明吗 当我们使用INSERT执行cfloop时,如果每个值都使用cfqueryparam'ed,并以不同的迭代次数调用cfquery,会发生什么 准备过多的报表是否存在任何潜在问题 DB如何处理准备好的语句?它们会被转换成类似于存储过程的东西吗 在什么情况下我们不应该使用事先准备好的声明 谢谢大家! 我
cfqueryparam
,那么cfquery
是否就成为一个准备好的语句?还是有其他条件
当orderby
子句或FROM
子句是动态的时会发生什么?每一个独特的组合都会成为一份事先准备好的声明吗
当我们使用INSERT
执行cfloop
时,如果每个值都使用cfqueryparam'ed,并以不同的迭代次数调用cfquery,会发生什么
准备过多的报表是否存在任何潜在问题
DB如何处理准备好的语句?它们会被转换成类似于存储过程的东西吗
在什么情况下我们不应该使用事先准备好的声明
谢谢大家! 我可以回答你问题的某些部分:
一个查询将成为一个preparedStatement,只要有一个
。此外,如果您询问执行计划,那么所涉及的不仅仅是preparedStatement生成的数量。这是一个庞大的主题,非常依赖数据库。我对它没有DBA的理解,但我可以回答一些有关MS SQL的问题
当ORDERBY子句或FROM子句是动态的时会发生什么?将
每一个独特的组合都会成为一份事先准备好的声明
基本sql是不同的。因此,对于每个唯一的ORDERBY子句,您将得到单独的执行计划
当我们使用INSERT和每个值执行cfloop时会发生什么
cfqueryparam'ed,并使用不同数量的
迭代
MS SQL应该在所有迭代中重用相同的计划,因为只有参数会更改
该视图对于查看缓存了哪些计划以及它们的重用频率非常有用
SELECT p.usecounts, p.cacheobjtype, p.objtype, t.text
FROM sys.dm_exec_cached_plans p
CROSS APPLY sys.dm_exec_sql_text( p.plan_handle) t
ORDER BY p.usecounts DESC
要首先清除缓存,请使用DBCC FLUSHPROCINDB
。显然,不要在生产服务器上使用它
DECLARE @ID int
SET @ID = DB_ID(N'YourTestDatabaseName')
DBCC FLUSHPROCINDB( @ID )
还值得注意的是,默认的MySQL JDBC设置禁用服务器端准备的语句(正如我在这里所揭示的)。