基于sql中的where条件的不同时间的相同执行时间?怎么解决?

8i9zcol2  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(362)

我的数据库有700万条记录,包含30多个变量,下面的查询是根据每天的情况过滤数据,大约需要12分钟才能返回结果

select customername, productname from xyztable where (datatime between '2019-05-17 00:00:00.000'
and '2019-05-18 00:00:00.000')

同样的数据,我也需要过滤它的基础上每小时如下,

select customername, productname from xyztable where (datatime between '2019-05-17 00:00:00.000'
and '2019-05-17 01:00:00.000')

我希望查询结果会更快每小时的基础上,因为数据将非常少。但这和每天的时间是一样的。
所以基本上每小时和每天的查询都需要12分钟才能返回结果。
我是否可以让每小时的结果返回比每天快得多?

jvlzgdj9

jvlzgdj91#

如果没有执行计划,我只能假设有一个表扫描来读取数据。您可以通过创建覆盖索引将其更改为索引查找:

create index ix_MyIndexName
on xyztable (datatime)
include (customername, productname)

然后,查询将查找datatime的第一个值,然后扫描到最后一个符合条件的行。由于索引中包含customername和productname,因此计划中不需要查找。

jw5wzhpr

jw5wzhpr2#

这是因为字段“datatime”上没有索引,所以SQLServer必须读取整个“xyztable”才能找到记录。尝试创建此索引:

CREATE INDEX IX_datatime_xyztable ON xyztable(datatime)

相关问题