全文搜索运行缓慢

时间:2015-10-23 17:28:35

标签: sql sql-server sql-server-2008-r2

我正在尝试使用PHP sqlsrv驱动程序为MS SQL运行全文搜索。查询运行速度很慢。 5秒以上可以返回任意数量的行...

查询:

SELECT DISTINCT
  MAX(i.ID) AS ID,
  i.ItemLookupCode,
  MAX(i.DepartmentID) AS DepartmentID,
  MAX(i.CategoryID) AS CategoryID,
  MAX(i.Quantity) AS Quantity,
  MAX(CAST(i.Notes AS varchar(max))) AS Notes,
  MAX(CONVERT(varchar(30), i.Price, 1)) AS Price,
  MAX(i.SaleType) AS SaleType,
  MAX(i.SaleStartDate) AS SaleStartDate,
  MAX(i.SaleEndDate) AS SaleEndDate,
  MAX(CONVERT(varchar(30), i.SalePrice, 1)) AS SalePrice,
  MAX(i.PictureName) AS PictureName,
  MAX(n.SpoofStock) AS SpoofStock,
  MAX(n.PAM_Brand) AS Brand

FROM Item AS i

LEFT JOIN nitroasl_pamtable AS n
  ON i.ID = n.ItemID

WHERE CONTAINS(
  (i.ItemLookupCode, i.Notes, i.Description, i.ExtendedDescription),
  '"displayport" AND "hdmi"')

OR CONTAINS(
  (n.PAM_Brand, n.ManufacturerPartNumber, n.PAM_Keywords),
  '"displayport" AND "hdmi"')

AND ( i.WebItem = 1 AND i.Price > 0 )

GROUP BY i.ItemLookupCode

ORDER BY i.ItemLookupCode ASC

思想

我是这个SQL的新手,我只是刚刚学会了全文搜索。它声称在更大的数据库和返回大型结果集时运行速度更快。但是,此查询运行速度非常慢(5秒以上可返回42行)。

我使用Server Management Studio重建了目录索引,并更新了表的统计信息。当查询运行缓慢时,建议这些事情。

最后,我在同一个FullTextCatalog中列出了两个表。由于这种类型的搜索的一般功能让我感到厌烦,我不确定这是坏事还是好事......为什么我在同一目录中有两个表?我几乎总是在同一个查询中查询这两个表。他们一起持有我们的产品'数据

任何人都可以帮我识别:

  1. 为什么此查询永远需要在本地返回行
  2. 应用程序本地托管在IIS,PHP 5.6上,使用SQL Server 2008 R2上运行的3.2 sqlsrv驱动程序(在我们的网络中的服务器上运行)。

    更新1

    当仅使用CONTAINS((row1,row2,etc), 'hdmi')时,查询会更快地运行头发,但返回543行?这有什么作用?

    更新2

    我运行了以下一系列查询来创建我的目录和索引:

    use NWCA
    create fulltext catalog FullTextCatalog as default
    
    select *
    from sys.fulltext_catalogs;
    
    CREATE FULLTEXT INDEX ON on Item(ItemLookupCode, Notes, Description, ExtendedDescription)
    KEY INDEX PK_Item;
    
    CREATE FULLTEXT INDEX ON on nitroasl_pamtable(PAM_Brand, ManufacturerPartNumber, PAM_Keywords)
    KEY INDEX PK_nitroasl_pamtable;
    

    在确定查询运行速度超慢之后,我找到了解决方案。我发现建议说重建目录会有所帮助;所以我使用SMS UI。

    我还读到我可以尝试更新统计信息(请注意,我不知道这些过程是做什么的,因为我不熟悉MS SQL中的全文搜索):

    UPDATE STATISTICS Item
    GO
    

    所以是的,在听到上述更新后,任何人都有任何想法或启示吗?

    更新 这是执行计划的结果...... Execution Plan

0 个答案:

没有答案