在over varchar(500)的地方

fus*_*ion 3 sql t-sql sql-server sql-server-2000

我有一个查询,当我添加添加部分时,它会大大减慢

这基本上就像在varchar(500)字段上查找一样

哪里...

和(xxxxx.yyyy喜欢'%blahblah%')

我一直在绞尽脑汁,但是当我添加它时,查询的速度非常慢.

我想知道是否有人在改变字段类型,索引设置或索引提示或可能有帮助的事情方面有建议.

任何帮助赞赏.

sql 2000企业.

这里还有一些额外的信息:

哎呀.作为一些背景,不幸的是我需要(在类似声明的情况下)在前面有%.背后有商业逻辑,我无法避免.

我已经在该字段上创建了一个全文目录,这导致了我的问题,并将搜索转换为使用包含语法.

不幸的是,虽然这有时会提高性能,但对于新单词搜索来说似乎很慢(较慢).因此,如果我有苹果..苹果似乎在随后的时间更快,但不是橙色的新搜索(例如).

所以我不认为我可以接受(除非你可以建议一些修改使其更加一致).

附加信息:

该表只包含大约6万条记录,我试图过滤的字段是windows server 2003上的varchar(500)sql 2000

我正在使用的查询肯定是错综复杂的

对不起,我不得不替换专有的东西..但应该给你和查询的指示:

SELECT TOP 99 AAAAAAAA.Item_ID, AAAAAAAA.CatID, AAAAAAAA.PID, AAAAAAAA.Description, 
AAAAAAAA.Retail, AAAAAAAA.Pack, AAAAAAAA.CatID, AAAAAAAA.Code, BBBBBBBB.blahblah_PictureFile AS PictureFile, 
AAAAAAAA.CL1, AAAAAAAA.CL1, AAAAAAAA.CL2, AAAAAAAA.CL3 
FROM CCCCCCC INNER JOIN DDDDDDDD ON CCCCCCC.CID = DDDDDDDD.CID 
INNER JOIN AAAAAAAA ON DDDDDDDD.CID = AAAAAAAA.CatID LEFT OUTER JOIN BBBBBBBB 
ON AAAAAAAA.PID = BBBBBBBB.Product_ID INNER JOIN EEEEEEE ON AAAAAAAA.BID = EEEEEEE.ID 
WHERE 
(CCCCCCC.TID = 654321) AND (DDDDDDDD.In_Use = 1) AND (AAAAAAAA.Unused = 0) 
AND (DDDDDDDD.Expiry > '10-11-2010 09:23:38')  AND 
(
    (AAAAAAAA.Code = 'red pen') OR 
        ( 
            (my_search_description LIKE '% red %') AND (my_search_description LIKE '% nose %')  
            AND (DDDDDDDD.CID IN (63,153,165,305,32,33))
         )
)
AND (DDDDDDDD.CID IN (20,32,33,63,64,65,153,165,232,277,294,297,300,304,305,313,348,443,445,446,447,454,472,479,481,486,489,498)) 
ORDER BY AAAAAAAA.f_search_priority DESC, DDDDDDDD.Priority DESC, AAAAAAAA.Description ASC
Run Code Online (Sandbox Code Playgroud)

你可以看到抛出my_search_description过滤器还包括一个dddd.cid过滤器(业务逻辑).

这是减慢速度的部分(从我的页面的1.5-2秒加载到6-8秒的负载(ow ow ow))

可能是我对如何使全文搜索catelogue工作缺乏了解.

答案给我留下了非常深刻的印象,所以如果有人有任何提示,我会非常感激.

Jus*_*ner 8

如果您还没有,请启用全文索引.

不幸的是,在查询中使用LIKE子句确实会减慢速度.全文索引确实是我所知道的加速速度的唯一方式(当然是以存储空间为代价).

这里是SQL Server中全文搜索概述的链接,它将向您展示如何配置和更改查询以利用全文索引.

  • 从技术上讲,"LIKE"不是问题.更有可能的是,它是在搜索模式开头使用`%`通配符. (4认同)