SQL查询的Where子句数月和数年

时间:2018-09-04 11:27:06

标签: sql postgresql

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

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

请注意,我发现它非常易于理解和表达。速度如何? 有更快的选择吗?如果是这样,它们看起来如何?

1 个答案:

答案 0 :(得分:0)

通常,在编写SQL查询时,您不必真正担心速度。成熟的SQL Server将为您选择合理的执行计划。因此,您的查询可能很好。不过,您可以检查一些事情:

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

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