首页 > 解决方案 > 用于 SQL 查询月份和年份的 Where 子句

问题描述

我编写了一个 Sql 查询,其中有一个where子句将结果缩小为 withstart month start yearend month end year。请在下面找到带有where子句的部分(我的查询非常复杂,所以我不想提供所有详细信息):

SELECT *
  FROM foo
  WHERE (year, month) between (startYear, startMonth) and (endYear, endMonth);

请注意,我发现它非常容易理解并且非常富有表现力。它的速度怎么样?有更快的替代品吗?如果是这样,它们会是什么样子?

标签: sqlpostgresql

解决方案


通常,当您编写 SQL 查询时,您不应该真正担心速度。成熟的 SQL Server 会为您选择合理的执行计划。所以你的查询可能没问题。不过,您可以检查以下几点:

  • 您可以检查 where 子句中的列是否有索引。
  • 如果有复合索引,那么您可以确保以它们在索引定义中出现的相同顺序使用这些列。
  • 您可以确保在子句中使用搜索参数。WHERE简而言之,这意味着在比较之前不要对列值进行计算。

如果这个速度对您来说不够好,那么您可以调整查询的索引。即添加与您的 where 子句匹配的索引。一些 RDBMS-s 允许您按日期对表进行分区。有时您可以用几个简单的查询和临时表来替换一个复杂的查询。


推荐阅读