전체 텍스트 인덱스를 검색하고 올바르게 작동하는 것처럼 보이는 다음 SQL Server 쿼리를 사용하고 있습니다. 일부 추가 작업이 포함되어 있으므로 쿼리가 페이징과 함께 작동합니다.전체 텍스트 검색 결과를 정렬하지 않으려는 경우
그러나 필자가 알고있는 점은 전체 텍스트 검색 결과가 순위에 따라 정렬되어 반환된다는 점입니다.
하지만 맨 위에있는 OVER 절을 제거하면 오류가 발생합니다. 아무도이 쿼리는 결과를 리조트하지 수정 될 수 말해 줄래?
DECLARE @StartRow int;
DECLARE @MaxRows int;
SET @StartRow = 0;
SET @MaxRows = 10;
WITH ArtTemp AS
(SELECT TOP (@StartRow + @MaxRows) ROW_NUMBER() OVER (ORDER BY ArtViews DESC) AS RowID,
Article.ArtID,Article.ArtTitle,Article.ArtSlug,Category.CatID,Category.CatTitle,
Article.ArtDescription,Article.ArtCreated,Article.ArtUpdated,Article.ArtUserID,
[User].UsrDisplayName AS UserName
FROM Article
INNER JOIN Subcategory ON Article.ArtSubcategoryID = Subcategory.SubID
INNER JOIN Category ON Subcategory.SubCatID = Category.CatID
INNER JOIN [User] ON Article.ArtUserID = [User].UsrID
WHERE CONTAINS(Article.*,'FORMSOF(INFLECTIONAL,"htmltag")'))
SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,ArtUpdated,
ArtUserID,UserName
FROM ArtTemp
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows)
ORDER BY RowID
감사합니다.
감사합니다. 아마도 정확하고 올바른 답변입니다. 그러나 추가 조인과 열의 오버 헤드를 원하지는 않습니다. 또한 내가 가진 임시 테이블을 삭제 한 것으로 나타났습니다. 아마도 당신은 테스트를 위해 그것을했을 것입니까? 그것은 페이징 로직에 필요한 것 같습니다. –
맞네요 - CTE 만 변경/표시했습니다. 페이징에는 모든 것이 필요합니다. 조인 오버 헤드는 테이블 너비와 인덱스에 따라 알지 못할 수도 있습니다. 두 옵션 모두 외부 FTS 엔진을 사용하여 DB를 공격하고 어쨌든 일종의 행별 처리를 되돌려 보내야합니다. 그리고 어떤 사람들은'CONTAINSTABLE'을 더 빨리 발견합니다. http://www.eggheadcafe.com/software/aspnet/29849015/contains-vs-containstable-performance.aspx – Matt
맞습니다. CONTAINS는 부울 일치입니다, 예 또는 아니오입니다. 따라서 관련성을 전혀 분류하지 않습니다. Matt의 조언을 따르고 정렬 대신에 정렬 가능한 RANK를 사용하십시오. –