如果我有一个拥有数百万条目的庞大数据库,而且我需要的是与特定年份相关的信息(比如说2015年),如果我使用以下查询,我希望你们中的任何人都可以提供任何帮助。性能明智这将是最佳实践还是有另一种方法可以获得更好的查询,
CREATE INDEX table1_idx ON table1 (date_column);
SELECT text, date_column
FROM table1
WHERE datepart(yyyy, date_column) = 2015;
任何与此相关的帮助都将受到高度赞赏。
答案 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