How to add more OR searches with CONTAINS Brings Query to Crawl?

前端 未结 4 1602
我寻月下人不归
我寻月下人不归 2020-12-17 20:39

I have a simple query that relies on two full-text indexed tables, but it runs extremely slow when I have the CONTAINS combined with any additional

相关标签:
4条回答
  • 2020-12-17 20:58

    I would probably use the UNION. If you are really against it, you might try something like:

    SELECT a.CollectionID
    FROM collections a
      LEFT OUTER JOIN (SELECT CollectionID FROM collections WHERE CONTAINS(*, '"*fa*"')) c
        ON c.CollectionID = a.CollectionID
      LEFT OUTER JOIN (SELECT CollectionID FROM determinations WHERE CONTAINS(*, '"*fa*"')) d
        ON d.CollectionID = a.CollectionID
    WHERE a.CollrTeam_Text LIKE '%fa%'
       OR c.CollectionID IS NOT NULL
       OR d.CollectionID IS NOT NULL
    
    0 讨论(0)
  • 2020-12-17 20:59

    I'd be curious to see if a LEFT JOIN to an equivalent CONTAINSTABLE would perform any better. Something like:

    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
    
    0 讨论(0)
  • 2020-12-17 21:05

    We've experience the exact same problem and at the time, put it down to our query being badly formed - that SQL 2005 had let us get away with it, but 2008 wouldn't.

    In the end, we split the query into 2 SELECTs that were called using an IF. Glad someone else has had the same problem and that it's a known issue. We were seeing queries on a table with ~150,000 rows + full-text going from < 1 second (2005) to 30+ seconds (2008).

    0 讨论(0)
  • 2020-12-17 21:12

    I was going to suggest to UNION each as their own query, but as I read your question I saw that you have found that. I can't think of a better way, so if it helps use it. The UNION method is a common approach to a poor performing query that has several OR conditions where each performs well on its own.

    0 讨论(0)
提交回复
热议问题