对多个列进行模糊查询,有没有什么优化手段?

爱知菜 2012-05-21 06:03:47
比如一张表有10列,10列的类型都nvarchar(500),一共7万多行数据
然后给定一个关键词,我要将这7万行数据中任意一列含有这个关键词的数据都取出来
我想建立非聚集的索引,但是索引不能超过900字节,不行
这种情况有没有什么优化的手段,望大家不吝赐教
...全文
195 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱知菜 2012-05-22
  • 打赏
  • 举报
回复
谢谢大家啦,我知道了 原来是这样
contains((col1,col2,col3),'keyword')
不过col1,col2,col3的分词器必须一致
昵称被占用了 2012-05-22
  • 打赏
  • 举报
回复
模糊查询多列,就不要想用索引提高速度了
昵称被占用了 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:

可以用全文索引(fulltext),


全文索引不是针对某一列的吗?多列怎么用?难道用or 把条件连接起来?这样又有什么好处呢?谢谢
[/Quote]
多列可以的
select * from tb where contains(*,'keyword')
或者
select * from tb where contains((col1,col2,col3),'keyword')

不过你要先理解全文搜索中关于分词的一些原则,了解全文搜索与like查询在功能上的区别,否则很容易产生功能达不到要求的感觉

唐诗三百首 2012-05-22
  • 打赏
  • 举报
回复
是的,或者这样试试,

select * from tb where contains(tb.*,'keyword')
爱知菜 2012-05-21
  • 打赏
  • 举报
回复
是不是新建一个全文索引,包括这10列,然后查询的时候就是
select * from tb where contains(col1,'keyword') or contains(col2,'keyword') or contains(col3,'keyword') or contains(col4,'keyword') or contains(col5,'keyword') or contains(col6,'keyword')....
这样子啊,谢谢
唐诗三百首 2012-05-21
  • 打赏
  • 举报
回复
全文索引不是针对某一列的吗?
--> 可以多个字段.

多列怎么用?
--> 创建全文索引时勾选.

难道用or 把条件连接起来?
--> 这样避免不了全表扫描.

这样又有什么好处呢?
--> 提高查询速度.
爱知菜 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
老大好

不敢当,
[/Quote]
老大们,谁来回答下小弟的问题啊,谢谢,全文索引怎么用,难道在where语句里加一句
contain(cola,'keyword') or contain(colb,'keyword') or contain(colc,'keyword') or
.....
这样吗?不胜感激涕零中
唐诗三百首 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
老大好
[/Quote]
不敢当,
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

可以用全文索引(fulltext),
[/Quote]

老大好
爱知菜 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

可以用全文索引(fulltext),
[/Quote]

全文索引不是针对某一列的吗?多列怎么用?难道用or 把条件连接起来?这样又有什么好处呢?谢谢
唐诗三百首 2012-05-21
  • 打赏
  • 举报
回复
可以用全文索引(fulltext),
人生无悔 2012-05-21
  • 打赏
  • 举报
回复
像这种不用考虑在这些列上建立非聚簇索引了,建了对你查询也没帮助的,毕竟你要查的是'%..%',只会增加数据库对索引的维护开销。。。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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