我有一个查询,我必须在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,我必须根据时间偏移获取记录。 有什么办法解决这个问题?
通常,您要避免对列进行函数调用。因此,尝试以相反的顺序执行此操作:
SELECT *
FROM #TempTable
WHERE CAST(Date AS DATE) = SWITCHOFFSET('2019-11-20', '+07:00')
CAST()
是一个例外。这仍然允许使用索引。
注意:您想要在(Date)
上具有索引以提高性能。