【问题标题】:SQL Server full text search too slowSQL Server 全文搜索太慢
【发布时间】:2015-01-22 16:32:09
【问题描述】:

我遇到了 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) 上有一个全文索引。

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

谢谢!

【问题讨论】:

  • 你使用的是哪个版本的Sql Server

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


【解决方案1】:

如果您使用的是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_number 具有更好的性能。 Check here详细对比

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2011-06-10
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多