按日期排序很慢
Order By Case of Dates is Slow
此查询耗时 200 毫秒:
SELECT Date1, Date2 from Table1
ORDER BY Date1
同样,如果我按 Date2 排序,速度很快,需要 200 毫秒。
Date1 是 DateTime Not Null
日期 2 为空日期时间
Date3 是 DateTime Null
Date1 上有索引,Date2 上有另一个索引。
table 有 150 000 条记录。
如果我通过 CASE 语句排序,需要 1.5 秒。
SELECT
DateCase =
CASE
WHEN (Date1 IS NULL and Date2 IS NULL) THEN Date3
CASE
WHEN (date1 is null and Date2 is not null) then Date2
WHEN (date1 is not null) then date1
ELSE DATE3
from Table1
ORDER BY DateCase
关于如何加快此查询的任何想法?
好的试试,
SELECT DateCase = ISNULL(Date1,ISNULL(Date2,Date3))
FROM Table1
ORDER BY DateCase
[作者:Panagiotis Kanavos]
解决方案是创建一个计算列,添加我想在屏幕上显示的日期,它是在插入期间创建的。
那么这个列被索引了,性能还是不错的
它可能不适用于任何情况
(例如,一些表可能很大,或者可能有多个这样的情况,这会导致计算的列和索引太多,这可能不是一个好的解决方案),
但它很适合我的情况。
此查询耗时 200 毫秒:
SELECT Date1, Date2 from Table1
ORDER BY Date1
同样,如果我按 Date2 排序,速度很快,需要 200 毫秒。
Date1 是 DateTime Not Null
日期 2 为空日期时间
Date3 是 DateTime Null
Date1 上有索引,Date2 上有另一个索引。 table 有 150 000 条记录。
如果我通过 CASE 语句排序,需要 1.5 秒。
SELECT
DateCase =
CASE
WHEN (Date1 IS NULL and Date2 IS NULL) THEN Date3
CASE
WHEN (date1 is null and Date2 is not null) then Date2
WHEN (date1 is not null) then date1
ELSE DATE3
from Table1
ORDER BY DateCase
关于如何加快此查询的任何想法?
好的试试,
SELECT DateCase = ISNULL(Date1,ISNULL(Date2,Date3))
FROM Table1
ORDER BY DateCase
[作者:Panagiotis Kanavos] 解决方案是创建一个计算列,添加我想在屏幕上显示的日期,它是在插入期间创建的。 那么这个列被索引了,性能还是不错的
它可能不适用于任何情况 (例如,一些表可能很大,或者可能有多个这样的情况,这会导致计算的列和索引太多,这可能不是一个好的解决方案), 但它很适合我的情况。