请教SQL多个关键字并列搜索的问题

alenlyou 2010-07-05 05:40:04
select ...
WHERE a.[memberID]=b.[personalID] AND ( CHARINDEX(',0302,' , ','+ ExpectArea +',')>0 or CHARINDEX(',04' , ','+ ExpectArea +'')>0 or CHARINDEX(',01' , ','+ ExpectArea +'')>0 or CHARINDEX(',05' , ','+ ExpectArea +'')>0 or CHARINDEX(',02' , ','+ ExpectArea +'')>0 OR ExpectArea='3700') and DATEPART(year,born) between 1953 and 1989 and SkillEdu between 2 and 6 and SkillExp>=3 AND ( [KeyHistory] like '%深圳%' or [KeyOutline] like '%深圳%' or [ResumeName] like '%深圳%' or [SkillTechang] like '%深圳%' or [SkillSayme] like '%深圳%' OR [KeyHistory] like '%总监%' or [KeyOutline] like '%总监%' or [ResumeName] like '%总监%' or [SkillTechang] like '%总监%' or [SkillSayme] like '%总监%')

此SQL中[ExpectArea]是多项搜索,数据类型是数组形式。
关键字从表单传递过来时是“深圳,总监”,搜索时则需要按两个关键字进行搜索。

结果是此SQL效率非常之低。

请教有没有更好的方法。
...全文
458 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
alenlyou 2010-07-06
  • 打赏
  • 举报
回复
合并字段查询也没有发现速度的变化
column_A : [KeyHistory]+','+[KeyOutline]+','+[ResumeName]+','+[SkillTechang]
envykok 2010-07-06
  • 打赏
  • 举报
回复
添加一个计算列到表中

column_A : [KeyHistory]+','+[KeyOutline]+','+[ResumeName]+','+[SkillTechang]

而后

WHERE column_A like '%深圳%' or column_A like '%总监%'
nightmaple 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 alenlyou 的回复:]
引用 5 楼 nightmaple 的回复:

SQL code

( [KeyHistory] like '%深圳%' or [KeyOutline] like '%深圳%' or [ResumeName] like '%深圳%' or [SkillTechang] like '%深圳%' or [SkillSayme] like '%深圳%' OR [KeyHistory] like……
[/Quote]

你确定是这个地方影响速度?
alenlyou 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nightmaple 的回复:]

SQL code

( [KeyHistory] like '%深圳%' or [KeyOutline] like '%深圳%' or [ResumeName] like '%深圳%' or [SkillTechang] like '%深圳%' or [SkillSayme] like '%深圳%' OR [KeyHistory] like '%总监%' or [KeyOutline] li……
[/Quote]

这个写法不错,但没有快到多少。
nightmaple 2010-07-05
  • 打赏
  • 举报
回复
或者改成这样试试~
[KeyHistory]+[KeyOutline]+[ResumeName]+[SkillTechang] like '%深圳%' or
[KeyHistory]+[KeyOutline]+[ResumeName]+[SkillTechang] like '%总监%'
SQL77 2010-07-05
  • 打赏
  • 举报
回复
declare @s varchar(2000)
set @s='深圳,总监'
select @s='COL LIKE ''%'+REPLACE(@s,',','%'' or col like ''%')+'%'''

select @s


COL LIKE '%深圳%' or col like '%总监%'
nightmaple 2010-07-05
  • 打赏
  • 举报
回复

( [KeyHistory] like '%深圳%' or [KeyOutline] like '%深圳%' or [ResumeName] like '%深圳%' or [SkillTechang] like '%深圳%' or [SkillSayme] like '%深圳%' OR [KeyHistory] like '%总监%' or [KeyOutline] like '%总监%' or [ResumeName] like '%总监%' or [SkillTechang] like '%总监%' or [SkillSayme] like '%总监%')

改成
charindex('深圳',[KeyHistory]+[KeyOutline]+[ResumeName]+[SkillTechang])>0
or charindex('总监',[KeyHistory]+[KeyOutline]+[ResumeName]+[SkillTechang])>0

试试~
永生天地 2010-07-05
  • 打赏
  • 举报
回复
n 多的like。帮顶

试试,把字段连接起来like
guguda2008 2010-07-05
  • 打赏
  • 举报
回复
全文索引
SQL77 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sql77 的回复:]
SELECT * FROM TB WHERE COL LIKE '%'+REPLACE('深圳,总监','%')+'%'

?
[/Quote]
汗,理解错误
SQL77 2010-07-05
  • 打赏
  • 举报
回复
SELECT * FROM TB WHERE COL LIKE '%'+REPLACE('深圳,总监','%')+'%'

?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧