2011-10-14 2 views
0

내 웹 사이트가 약간 거대하며 Umbraco API를 사용하여 모든 노드에서 반복적으로 릴리스되고 만료 날짜가 초과되었습니다 .. 그래서 나는 ..DB에서 직접 릴리스 및 만료 날짜 받기 - 쿼리가 올바른지 확인하십시오.

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 
) 

어느 하나의 권리 ... 그 잘못된 경우,이 값을 얻을 수있는 적절한 방법 무엇을 잘못 여부를 확인하시기 바랍니다 수 있습니다 ..이 만료 노드의 날짜를 공개 찾는 쿼리를 다음

감사합니다.
Anz

답변

1

Umbraco에 대해서는 아무 것도 모른다. 그러나 과 같이 사용하면 모든 dbms가 your_column_name IS NOT NULL과 같은 표현식 평가에 인덱스를 사용하지는 않는다는 것을 알고있다.

대상 dbms가 IS NOT NULL을 sargable 표현식으로 처리하지 않으면 색인을 사용하지 않습니다. 대신 전체 테이블 스캔을 수행하므로 큰 테이블에서 오랜 시간이 걸릴 수 있습니다. 그리고 오랜 시간이 걸리면 시간 초과가 여전히 가능하다고 생각합니다.

releaseDate 또는 expireDate에 색인이 없을 수도 있습니다. 큰 테이블에서, 그것은 당신을 너무 많이 늦추게 할 것입니다.

오늘 전에 만료 된 문서를 알고 싶다면 삭제할 수 있으므로이 표준 SQL 문이 작동 할 것으로 기대합니다. (하지만 일부 Umbraco 하우스 키핑 모듈이 필요를 만들기 위해 기대.) 귀중한 정보를

select nodeId 
from cmsDocument 
where expiredate < CURRENT_DATE 
+0

감사합니다 .. 그래 난이 EXPIREDATE 같은 것을 사용할 수 있습니다