sco*_*lja 10 sql-server full-text-search full-text-indexing sql-server-2008
我有一个简单的查询依赖于两个全文索引表,但是当我将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
我很想知道LEFT JOIN到等效的CONTAINSTABLE会不会更好.就像是:
SELECT a.CollectionID
FROM collections a
INNER JOIN determinations b ON a.CollectionID = b.CollectionID
LEFT JOIN CONTAINSTABLE(a, *, '"*fa*"') ct1 on a.CollectionID = ct1.[Key]
LEFT JOIN CONTAINSTABLE(b, *, '"*fa*"') ct2 on b.CollectionID = ct2.[Key]
WHERE a.CollrTeam_Text LIKE '%fa%'
OR ct1.[Key] IS NOT NULL
OR ct2.[Key] IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1161 次 |
最近记录: |