【发布时间】:2010-10-12 16:41:22
【问题描述】:
我有一个查询,当我在 where 部分添加添加时,它的速度会大大降低
本质上只是对 varchar(500) 字段的类似查找
在哪里...
和(xxxxx.yyyy like '% blahblah %')
我一直在绞尽脑汁,但是当我添加它时,查询速度几乎变慢了。
我想知道是否有人在更改字段类型、索引设置或索引提示或其他可能有帮助的方面有建议。
任何帮助表示赞赏。
sql 2000 企业版。
这里有一些附加信息:
哎呀。不幸的是,作为一些背景,我确实需要(在 like 声明的情况下)将 % 放在前面。 背后有我无法回避的业务逻辑。
我已经在该字段上创建了一个全文目录,这给我带来了问题 并将搜索转换为使用 contains 语法。
不幸的是,虽然这有时会提高性能,但对于新词搜索来说似乎很慢(较慢)。 因此,如果我有苹果.. 苹果在随后的时间里似乎更快,但对于新的橙色搜索却没有(例如)。
所以我不认为我可以这样做(除非你可以建议一些修补以使其更加一致)。
附加信息:
该表仅包含大约 60k 条记录 我要过滤的字段是 varchar(500) Windows Server 2003 上的 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
您可以看到在 my_search_description 过滤器中抛出还包括一个 dddd.cid 过滤器(业务逻辑)。
这是减慢速度的部分(从我的页面的 1.5-2 秒加载到 6-8 秒的加载(ow ow ow))
这可能是我对如何让全文搜索目录正常工作缺乏了解。
答案给我留下了深刻的印象,所以如果有人有任何提示,我会非常感激。
【问题讨论】:
-
请提供更多关于表结构、表中数据等的信息。
标签: sql sql-server tsql sql-server-2000