Получение даты выпуска и истечения срока действия напрямую из БД. Пожалуйста, подтвердите, что запрос правильный или нет - PullRequest
0 голосов
/ 14 октября 2011

Мой веб-сайт немного огромен и проходит через все узлы, используя API-интерфейсы Umbraco для получения дат выпуска и истечения срока действия, поэтому время истекло ... поэтому я написал следующий запрос, чтобы найти даты истечения срока действия и выпуска узлов ..

SELECT D.nodeId, D.releaseDate, D.expireDate
FROM dbo.cmsDocument D  
WHERE D.newest = 1 AND  
(
    D.releaseDate IS NOT NULL  
    OR
    D.expireDate IS NOT NULL 
)

Может ли кто-нибудь подтвердить, правильно ли это или нет ... Если это неправильно, как правильно получить эти значения ..

Спасибо
Анз

1 Ответ

1 голос
/ 15 октября 2011

Я ничего не знаю об Umbraco, но я делаю знаю, что не все dbms будут использовать индекс при оценке выражений типа your_column_name IS NOT NULL.

Если ваша целевая база данных не обрабатывает IS NOT NULL как sargable выражение, то она не будет использовать индекс.Вместо этого он выполнит полное сканирование таблицы, что может занять много времени на большом столе.И если это займет много времени, я предполагаю, что тайм-аут все еще возможен.

Также возможно, что нет индекса для releaseDate или expireDate.На большом столе это тоже сильно замедлит работу.

Если вы хотите знать, какие документы истекли до сегодняшнего дня, может быть, поэтому вы можете удалить их, я (наивно) ожидал бы этот стандартный SQLзаявление на работу.(Но я также ожидал бы, что какой-нибудь модуль Umbraco по уборке сделает это ненужным.)

select nodeId
from cmsDocument
where expiredate < CURRENT_DATE
...