相关疑难解决方法(0)

使用CONTAINS添加更多OR搜索带来查询以进行爬网

我有一个简单的查询依赖于两个全文索引表,但是当我将CONTAINS与任何其他OR搜索结合使用时,它运行得非常慢.正如执行计划中所见,这两个全文搜索会破坏性能.如果我仅使用CONTAINS中的一个查询,或者两者都不查询,则查询是亚秒级的,但是当您将OR添加到混合中时,查询就会变得不合适.

这两张表没有什么特别之处,它们不是太宽(一个是42个,另一个是21个;可能每个10个列都是FT索引),甚至包含很多记录(两个中最大的36个记录).

我能够通过将两个CONTAINS搜索分成他们自己的SELECT查询来解决性能,然后将这三个UNION一起解决.UNION的解决方案是我唯一的希望吗?

谢谢.

SELECT     a.CollectionID
FROM       collections    a
INNER JOIN determinations b ON a.CollectionID = b.CollectionID 
WHERE      a.CollrTeam_Text LIKE '%fa%'
           OR CONTAINS(a.*, '"*fa*"')
           OR CONTAINS(b.*, '"*fa*"')
Run Code Online (Sandbox Code Playgroud)

执行计划(我想在发布图片之前需要更多声誉):http: //yfrog.com/7dslowcontainsj http://desmond.yfrog.com/Himg265/scaled.php?tn=0&server=265&filename=slowcontains.jpg&xsize = 640&YSIZE = 640

sql-server full-text-search full-text-indexing sql-server-2008

10
推荐指数
1
解决办法
1161
查看次数

跨多个表的SQL Server全文查询 - 为什么这么慢?

我正在尝试了解我正在构建的SQL Server 2008全文查询的性能.

以下查询使用全文索引立即返回正确的结果:

SELECT
    O.ID, O.Name
FROM
    dbo.EventOccurrence O
WHERE
    FREETEXT(O.Name, 'query')
Run Code Online (Sandbox Code Playgroud)

即所有在其名称中带有"查询"字样的EventOccurrences.以下查询使用来自不同表的全文索引也会立即返回:

SELECT
    V.ID, V.Name
FROM
    dbo.Venue V
WHERE
    FREETEXT(V.Name, 'query')
Run Code Online (Sandbox Code Playgroud)

即.所有场地的名字中都有"查询"字样.但是,如果我尝试连接表并同时执行两个全文查询,则返回12秒:

SELECT
    O.ID, O.Name
FROM
    dbo.EventOccurrence O
    INNER JOIN dbo.Event E ON O.EventID = E.ID
    INNER JOIN dbo.Venue V ON E.VenueID = V.ID
WHERE
    FREETEXT(E.Name, 'search')
    OR FREETEXT(V.Name, 'search')
Run Code Online (Sandbox Code Playgroud)

这是执行计划:http://uploadpad.com/files/query.PNG

更新:以文本形式的计划:

  |--Nested Loops(Left Semi Join, OUTER REFERENCES:([E].[ID], [V].[ID]))
       |--Hash Match(Inner Join, HASH:([E].[ID])=([O].[EventID]))
       |    |--Hash Match(Inner Join, HASH:([V].[ID])=([E].[VenueID]))
       |    |    |--Clustered Index Scan(OBJECT:([iScene].[dbo].[Venue].[PK_Venue] AS [V])) …
Run Code Online (Sandbox Code Playgroud)

sql-server full-text-search

7
推荐指数
1
解决办法
2900
查看次数