【发布时间】:2020-03-16 05:17:06
【问题描述】:
我有一个查询,我必须在 where 子句中使用 switchoffset 从数据库中获取记录,这需要大量时间。例如:
CREATE TABLE #TempTable(
ID int,
Date datetime,
Name char(20))
就像下面我在表中有 > 100k 条记录(这是真实情况)。下面只有 10 条记录,结果很快就会出来,但是如果我们用 5000 条记录尝试这个,它只会卡住几分钟。
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 1, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 2, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 3, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 4, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 5, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 6, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 7, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 8, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
VALUES( 9, GETDATE(), 'abc' );
INSERT INTO #TempTable( ID, Date, Name )
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