from子句中未使用的表是否会影响查询的性能?

时间:2016-06-16 14:45:53

标签: sql sybase

我正在动态地构建查询。我注意到,如果查询在“FROM”子句中有未使用的表,则会影响性能。只是想知道这种行为是否正确?我正在使用SYBASE DB。

EDIT 未使用的表意味着我已将它包含在from子句中但我没有在where子句

中使用它

2 个答案:

答案 0 :(得分:1)

从技术上讲,SQL是一种描述性语言,而不是过程语言。这意味着SQL查询描述了结果集,但引擎可以随意执行查询。

因此,SQL优化器可能会优化对表的引用。 tis的一个极端例子是Google的BigQuery,它可以缓存查询结果。查询缓存通常在查询运行时第二次使用 - 结果将被重复使用而不是重新计算。

但实际上,基本上所有SQL引擎(如果执行查询)都将处理FROM子句中的表(直接或通过索引)。可能有一些SQL引擎会优化掉一些引用(例如,left join到第二个表的主键上没有使用列的表。

但是,作为一般规则,您可以预期添加更多表会影响性能。

答案 1 :(得分:0)

绝对。它假设您需要JOIN,因为它在您的查询中(作为过滤器或其他原因)。如果它只是一个连接(即:逗号分隔表)而没有WHERE条件,那么性能将受到很大影响,因为它将对您的结果执行笛卡尔或交叉产品。

来自Sybase docs:

  

交叉产品联接返回产生所有可能结果的结果集   两个表中的行组合。中的行数   结果集是第一个表中行数的乘积   第二个表中的行数。

     

示例数据库中的FinancialData和FinancialCodes   包含虚构公司的财务数据。两张桌子都有   可用于连接两个表的代码列。

     

以下SELECT语句列出了所有数据   FinancialCodes和FinancialData表:

     

SELECT * FROM FinancialCodes,FinancialData

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc38159.1540/doc/html/san1281545626162.html