SQL Server全文搜索太慢了

时间:2015-01-22 16:32:10

标签: sql asp.net .net sql-server performance

我遇到了SQL Server的全文搜索运行速度太慢的问题。

花了一分钟时间来运行全文搜索和JOIN查询(见下文)

select * from

(SELECT 
    (row_number() over ( order by b.BookKey)) as RowNumber,
    p.PublishCity,
    b.BookKey,
    b.BookTitle
from
    Books b (nolock)
    inner join PublishedRegions p (nolock)
        on b.BookKey = p.BookKey
where
    contains(p.PublishCity, 'France') or
    contains(b.BookTitle, 'France')
) as t1

where
    RowNumber between 200 and 210
  • 作为参考,Books表和PublishedRegions表中有大约500k行
  • 我无法将PublishedCity放在Books表中,因为SQL Server只允许您为每个表定义一个全文索引。
  • 注意:最后一部分RowNumber在200和210之间是任意插入的。我可以选择任何一组行,结果仍然需要很长时间
  • Books表在BookName NVARCHAR(255)
  • 上有一个全文索引
  • PublishedRegions在PublishedCity NVARCHAR(255)上有一个全文索引。

任何想法如何提高这个性能?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您使用的是Sql Server 2012+,那么paging而不是Row_Number使用OFFSET..FETCH。这样的事情。

SELECT
    p.PublishCity,
    b.BookKey,
    b.BookTitle
FROM
    Books b (nolock)
    INNER JOIN PublishedRegions p (nolock)
        ON b.BookKey = p.BookKey
WHERE
    CONTAINS(p.PublishCity, 'France') OR
    CONTAINS(b.BookTitle, 'France')
ORDER BY b.BookKey OFFSET 199 ROWS FETCH NEXT 11 ROWS ONLY

Offset-Fetch方法的效果优于Row_numberCheck here进行详细比较