Заказ по датам медленный - PullRequest
0 голосов
/ 23 октября 2019

Этот запрос занимает 200 мс:

SELECT Date1, Date2 from Table1
ORDER BY Date1 

То же самое, если я заказываю по Date2, это быстро и занимает 200 мс.

Date1 is DateTime Not Null

Date2 isDateTime Null

Date3 равен DateTime Null

Индекс на Date1 и другой индекс на Date2. В таблице 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 

Есть идеи, как ускорить этот запрос?

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

[Автор Panagiotis Kanavos] Решением было создать вычисляемый столбец, который добавляет дату, которую я хочу показать на экране, и она создается во время вставки. Затем этот столбец индексируется, и производительность хорошая.

Он может быть неприменим в любом случае (например, некоторые таблицы могут быть огромными или могут иметь несколько таких случаев, что приведет к слишком большому количеству вычисляемых столбцови индексы, которые не могут быть хорошим решением) , но это хорошо работает для моего случая.

0 голосов
/ 23 октября 2019

хорошо, попробуй,

SELECT DateCase = ISNULL(Date1,ISNULL(Date2,Date3)) 
FROM Table1
ORDER BY DateCase 
...