sql - 哪里喜欢超过 varchar(500)

标签 sql sql-server tsql sql-server-2000

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

这本质上只是对 varchar(500) 字段的类似查找

在哪里...

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

我一直在绞尽脑汁,但是当我添加它时,查询的速度几乎减慢了。

我想知道是否有人对更改字段类型、索引设置或索引提示或可能有帮助的东西有任何建议。

任何帮助表示赞赏。

SQL 2000 企业版。

以下是一些附加信息:

哎呀。不幸的是,作为一些背景,我确实需要(在类似语句的情况下)将 % 放在前面。
背后有我无法避免的商业逻辑。

从那以后,我在该领域创建了一个全文目录,这给我带来了问题
并将搜索转换为使用 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))

这可能是我对如何让全文搜索目录工作缺乏了解。

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

最佳答案

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

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

这是 Full-Text Search in SQL Server 概述的链接这将向您展示如何配置事物并更改您的查询以利用全文索引。

关于sql - 哪里喜欢超过 varchar(500),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917005/

相关文章:

sql - postgreSQL:插入多行,其中只有一列值发生变化

sql - 将所有行中的值转换为 VARBINARY(50)

.net - 如何将现有的 SQL Server 存储过程添加到源代码管理?

php - Mysql计数不删除

c# - 将 OData 转换为 sql 字符串

tsql - 在INSERT之后使用OUTPUT将标识列的值转换为(非表值)变量

sql - 每天的数据差异

tsql - T-SQL - 如何编写查询以获取与多对多连接中的所有记录匹配的记录

带有汉字的MySQL数据类型

java - 连接到 Microsoft SQL Server 时 Java 运行时环境检测到 fatal error