如何有效率得对数据表的所有字段进行关键字匹配查询?

TonyTonyQ 2005-06-21 02:32:50
RT
比如有数据表1,字段为A,B,C,D共4个字段,用户输入一个关键字“test”,我要查出这张表里任意一个字段值包含“test”的所有记录。也就是要查询每一条记录的A,B,C,D这4个字段,只要其中一个包含这个关键字就列出这条记录。
虽然可以用 like 关键字对每个字段进行查询得到这种结果,但是如果这张表里有几十万条记录,有100多个字段,如何保证运行效率?有无其他方法可以实现此种需求?
当然,建立索引对检索有一定帮助,但是对于一张频繁进行数据操作的表,索引维护所需要的开销也是非常大的,又该如何建立有效率的索引?还是不建索引?

如果有好的方法,请不吝赐教,需要 sql server 和 oracle 的实现方法
...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
syeerzy 2005-06-24
  • 打赏
  • 举报
回复
用LIKE , 百万数据这个数量级上一般不会有什么效能上的大问题(当然,SQL不能乱写)

用函数就不一样了...所以在数据大的时候,一般不要在Sql语句中使用任何哪怕简单的函数(比如字符串截取等)实在需要也最好在程序中做这个工作.
TonyTonyQ 2005-06-24
  • 打赏
  • 举报
回复
测试了一下,在 Oracle 里,当数据表中包含 CLOB 或者 XMLTYPE 类型字段的时候,用 select * 不行,用 xmltype.getclobval()进行转换也无法使用 union 来联合结果集。

请问有没有解决方案,只要拿到 XMLTYPE 或 CLOB 类型的字段,并不是要对这样的字段进行检索。Select应该怎么写?

对于一般字段类型的表,上述方法可行,执行效率也在可接受范围内,在此感谢楼上两位。
TonyTonyQ 2005-06-21
  • 打赏
  • 举报
回复
to LANXUEFEI(蓝血)
我测试一下看看,先谢了
LANXUEFEI 2005-06-21
  • 打赏
  • 举报
回复
to qzj

你测试了吗?几十万的数据少了,我测试的都在300万以上
huangjianyou 2005-06-21
  • 打赏
  • 举报
回复
还有就是要使用“索引”和“存储过程”。

^_^
TonyTonyQ 2005-06-21
  • 打赏
  • 举报
回复
楼上的有没有想过数据量在几十万,字段在100多个的时候,union后会出现什么情况?我也想过用union,不过这样做的数据量太大了阿
LANXUEFEI 2005-06-21
  • 打赏
  • 举报
回复
是的,不好意思,没有注意
cliff1002 2005-06-21
  • 打赏
  • 举报
回复
楼上的 "lile" 应该是 "like"吧
LANXUEFEI 2005-06-21
  • 打赏
  • 举报
回复
huangjianyou 说的可行

select * from 表1 where a lile 'test%'
union
select * from 表1 where b lile 'test%'
union
select * from 表1 where c lile 'test%'
union
select * from 表1 where d lile 'test%'
不过要分别在a,b,c,d 上建立索引,也就是4个索引,这一点非常重要
huangjianyou 2005-06-21
  • 打赏
  • 举报
回复
用联合查询行不?
先把一个字段的查询出来再联合另一个字段的,这样比在条件里每个字符都like应该快一些吧。
没试过,只不过有这个可能。

^_^

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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