我正在动态地构建查询。我注意到,如果查询在“FROM”子句中有未使用的表,则会影响性能。只是想知道这种行为是否正确?我正在使用SYBASE DB。
EDIT 未使用的表意味着我已将它包含在from子句中但我没有在where子句
中使用它答案 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