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工作缺乏了解.
答案给我留下了非常深刻的印象,所以如果有人有任何提示,我会非常感激.
如果您还没有,请启用全文索引.
不幸的是,在查询中使用LIKE子句确实会减慢速度.全文索引确实是我所知道的加速速度的唯一方式(当然是以存储空间为代价).
这里是SQL Server中全文搜索概述的链接,它将向您展示如何配置和更改查询以利用全文索引.