当where子句中有switchoffset时如何快速记录?

问题描述 投票:0回答:1

我有一个查询,我必须在where子句中使用switchoffset从数据库中获取记录,这很费时间。例如-:

创建表#TempTable(ID int,日期datetime名称char(20))

[就像下面假设我的表中有数十万条记录(这是真实的情况)。下面只有10条记录,结果将很快出现,但是如果我们尝试使用5000条记录,它只会停留几分钟。

INSERT INTO #TempTable(ID,Date,Name)VALUES(1,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(2,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(3,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(4,GETDATE(),'abc')插入#TempTable(ID,Date,名称)VALUES(5,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(6,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(7,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(8,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(9,GETDATE(),'abc')插入#TempTable(ID,日期,名称)VALUES(10,GETDATE(),'abc')

SELECT * FROM #TempTable WHERE CAST(SWITCHOFFSET([Date],'-07:00')AS DATE)='2019-11-20'

在需要时间的情况下使用switchoffset,我必须根据时间偏移获取记录。 有什么办法解决这个问题?

sql sql-server sql-server-2008 sql-server-2005 sql-server-2012
1个回答
0
投票

通常,您要避免对列进行函数调用。因此,尝试以相反的顺序执行此操作:

SELECT *
FROM #TempTable
WHERE CAST(Date AS DATE) = SWITCHOFFSET('2019-11-20', '+07:00')

CAST()是一个例外。这仍然允许使用索引。

注意:您想要在(Date)上具有索引以提高性能。

© www.soinside.com 2019 - 2024. All rights reserved.