Database 我应该在查询中使用“maxrows”吗?ColdFusion/SQL
搜索带有数字主键的行时是否需要使用maxrows=1Database 我应该在查询中使用“maxrows”吗?ColdFusion/SQL,database,coldfusion,cfquery,Database,Coldfusion,Cfquery,搜索带有数字主键的行时是否需要使用maxrows=1 <cfquery maxrows="1"> select * from table where RowID = #NumericVariable# </cfquery> 如果包含或排除maxrows,ColdFusion是否具有某种SQL绑定或任何其他使其更好/更快/更好的功能?否。 如果表的结构正确,即您限制的字段是主键,则限制为1是多余的。根据定义,主键唯一标识一行。No。 如果表的结构正确
<cfquery maxrows="1">
select *
from table
where RowID = #NumericVariable#
</cfquery>
如果包含或排除maxrows,ColdFusion是否具有某种SQL绑定或任何其他使其更好/更快/更好的功能?否。
如果表的结构正确,即您限制的字段是主键,则限制为1是多余的。根据定义,主键唯一标识一行。No。
如果表的结构正确,即您限制的字段是主键,则限制为1是多余的。根据定义,主键唯一标识一行。我将测试它: 对10个不同的RowID值按原样运行上述代码,并将其与在maxrows条件下运行代码进行比较。如果您看到后者的执行时间总是更好,那么您就有了明确的答案 我会测试一下:
对10个不同的RowID值按原样运行上述代码,并将其与在maxrows条件下运行代码进行比较。如果您看到后者的执行时间总是更好,那么您就有了明确的答案 其工作原理是,cfquery仍然尝试查询符合where子句的所有表行,但它只返回x个结果 所以对性能来说不是很好 至少在SQL Server中,另一个替代方法是SET ROWCOUNT命令,它实际上限制了它返回的记录数。但是,如果在cfadmin中有check persistant,则这可能会影响所有cfquery 或者在mysql中有limit命令
我希望有一个更好的解决方案,但是没有。这是如何工作的,cfquery仍然尝试查询符合where子句的所有表行,但它只返回x个结果 所以对性能来说不是很好 至少在SQL Server中,另一个替代方法是SET ROWCOUNT命令,它实际上限制了它返回的记录数。但是,如果在cfadmin中有check persistant,则这可能会影响所有cfquery 或者在mysql中有limit命令 我希望有更好的解决方案,但是没有。maxrows限制查询变量从数据库返回后的结果数 如果只返回一个结果,那么这对查询的性能不会有任何影响 ColdFusion允许您使用CFQUERYPARAM标记传递绑定参数 例如:
<cfquery name="q">
SELECT property1, property2, property3
FROM yourTable
WHERE RowID = <cfqueryparam value="#NumericVariable#" cfsqltype="CF_SQL_INTEGER" />
</cfquery>
您可以通过提供绑定参数并指定要返回的属性来提高数据库的速度。这可能允许更好的查询缓存和性能改进,具体取决于您使用的数据库引擎
我想补充一点,使用CFQUERYPARAM通常比保留不符合条件的变量更安全,并且可能会受到SQL注入攻击。maxrows限制查询变量从数据库返回后的结果数
如果只返回一个结果,那么这对查询的性能不会有任何影响
ColdFusion允许您使用CFQUERYPARAM标记传递绑定参数
例如:
<cfquery name="q">
SELECT property1, property2, property3
FROM yourTable
WHERE RowID = <cfqueryparam value="#NumericVariable#" cfsqltype="CF_SQL_INTEGER" />
</cfquery>
您可以通过提供绑定参数并指定要返回的属性来提高数据库的速度。这可能允许更好的查询缓存和性能改进,具体取决于您使用的数据库引擎
我想补充一点,使用CFQUERYPARAM通常比保留不合格的变量和可能遭受SQL注入攻击更安全。不,这一点都不必要。虽然带有真实数据库查询的maxrow可能是可质疑的,并被SQL limit子句mySQL替换,这也优化了数据库的性能,但对于查询查询,maxrow参数是限制结果集的唯一可能,因为查询查询不支持limit子句。 e、 g:
我只是想指出这一点。不,这完全没有必要。虽然带有真实数据库查询的maxrow可能是可质疑的,并被SQL limit子句mySQL替换,这也优化了数据库的性能,但对于查询查询,maxrow参数是限制结果集的唯一可能,因为查询查询不支持limit子句。 e、 g:
我只是想指出这一点。如果表的结构正确,即您限制的字段是主键,那么限制为1是多余的。@Mark我想您可以将其作为答案发布:我确实得到了我想要的答案。我只是想澄清一下,当您在SQL中指定要查找一行时,包含maxrows并不是多余的。当使用where RowID=NumericVariable时,您请求的是一行。使用CF的maxrows限制您请求的数据的输出。因此,您可以使用SQL和th请求50行
en将输出限制为一行。这与请求一行并输出一行不同。这里讨论的主题很清楚:如果表结构正确,即限制的字段是主键,那么限制一是多余的。@Mark我想你可以将其作为答案发布:我确实得到了我想要的答案。我只是想澄清一下,当您在SQL中指定要查找一行时,包含maxrows并不是多余的。当使用where RowID=NumericVariable时,您请求的是一行。使用CF的maxrows限制您请求的数据的输出。因此,您可以使用SQL请求50行,然后将输出限制为一行。这与请求一行并输出一行是不同的。这里讨论的主题很清楚:我同意这是多余的。如果包含或排除maxrows,ColdFusion是否具有某种SQL绑定或其他使其更好/更快的功能?始终限制数据库端的记录,而不是使用CF。让数据库返回CF将要丢弃的信息是一种资源浪费。我同意这是多余的。如果包含或排除maxrows,ColdFusion是否具有某种SQL绑定或其他使其更好/更快的功能?始终限制数据库端的记录,而不是使用CF。让数据库返回CF将要丢弃的信息是一种资源浪费。这正是我要寻找的答案:maxrows限制从数据库返回查询变量后查询变量中的结果数。如果这是真的,那么就完全没有必要包含maxrows。这里讨论的主题很清楚:这正是我想要的答案:maxrows限制查询变量从数据库返回后的结果数。如果这是真的,那么就完全没有必要包含maxrows。这里清楚地讨论了这个主题: