我需要选择一个包含日期的记录(范围:从 1998 年到 1999 年)。我写了似乎确实有效的声明。为什么?
SELECT *
FROM Factory
WHERE
(EXTRACT(YEAR FROM date) AS dyear) BETWEEN '1998' AND '1999'
如果表包含数千行,则对其中的每一行应用该Year()
函数将是一个明显的性能挑战。(实际上,对于较小的表来说,这也是一个性能挑战,但在这种情况下您不太可能注意到命中。)更有效的方法是索引字段并使用索引检索来限制数据库引擎的工作负载.Factory
[date]
SELECT f.*
FROM Factory AS f
WHERE f.date >= #1998-1-1# AND f.date < #2000-1-1#;
只要有可能,设计您的查询以利用索引检索。这可以显着提高性能。作为一个简单的经验法则:索引检索 = 好;全表扫描=坏。尽可能避免全表扫描。