从性能角度看,以下SQL是好还是坏?

时间:2016-04-30 04:43:21

标签: mysql sql sql-server

如果我有一个拥有数百万条目的庞大数据库,而且我需要的是与特定年份相关的信息(比如说2015年),如果我使用以下查询,我希望你们中的任何人都可以提供任何帮助。性能明智这将是最佳实践还是有另一种方法可以获得更好的查询,

CREATE INDEX table1_idx ON table1 (date_column);
SELECT text, date_column
FROM table1
WHERE datepart(yyyy, date_column) = 2015;

任何与此相关的帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

如果这是关于SQL Server的,那不是这样做的。使用字段上的任何函数都可以使用非SARGable。

始终使用如下正确的搜索条件:

averageRating

您可能还需要考虑将SELECT text, date_column FROM table1 WHERE date_column >= '20150101' and date_column < '20160101' 添加为包含的列以防止键查找:

text

答案 1 :(得分:0)

MySQL不能使用索引范围扫描操作,因为函数包裹在列周围。必须针对表中的每个行评估该函数。

要获取索引范围扫描操作,请在 bare 列上进行比较。

例如:

 SELECT t.text
      , t.date_column
   FROM table1 t
  WHERE t.date_column >= '2015-01-01'
    AND t.date_column  < '2015-01-01' + INTERVAL 1 YEAR