有人知道如何加快以下查询:
select count (*)
from table
where column1 between DATEADD(day, -90, convert(date, getdate())) AND getdate()
and column2 is not null
此查询需要20秒。为8.000行
我认为/知道瓶颈是转换,但这是必要的......
答案 0 :(得分:2)
您的查询没问题。转换是在常量上,而不是在列上。相反,你需要一个索引。这可能会有所帮助:
create index idx_table_column1_column2 on table(column1, column2);
这是覆盖索引,因此只使用索引来满足查询。
答案 1 :(得分:1)
这不太可能成为指数问题。
sqlserver-2008中有bug。它应该在较新版本的sqlserver
中修复请改为尝试:
declare @from datetime = DATEADD(day, -90, convert(date, getdate()))
declare @to datetime = getdate()
select count (*)
from table
where column1 between @from and @to
and column2 is not null
您可以阅读类似的问题here
答案 2 :(得分:0)
确保column1和WHERE子句条件数据类型是否兼容。 还可以在必要时尝试在列上创建索引,但始终有维护 索引。
感谢。