Database 我应该在查询中使用“maxrows”吗?ColdFusion/SQL

Database 我应该在查询中使用“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。 如果表的结构正确

搜索带有数字主键的行时是否需要使用maxrows=1

<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。这里清楚地讨论了这个主题: