SQL千万级数据like速度

liulangdeyuyu 2013-02-02 10:06:37
表中有几千万条数据

现在的需要是查询出列中包含某字段的所有数据

select * from table1 where lie1 like '%aa%'

但这样速度实在是太慢了.

有没有什么实用点的方法,比如说先查部分数据等

应该怎么实现?
...全文
998 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinarp 2013-02-17
  • 打赏
  • 举报
回复
全文检索是可以的吧
qqqqqqqq_2013 2013-02-17
  • 打赏
  • 举报
回复
建索引,用charindex代替like
lkf181 2013-02-16
  • 打赏
  • 举报
回复
建索引呗!!!!!!!!
sych888 2013-02-11
  • 打赏
  • 举报
回复
全文索引。。。。。。
Kilin_Zhang 2013-02-07
  • 打赏
  • 举报
回复
这么大的数据量,果断放弃like吧
xiabanghu 2013-02-07
  • 打赏
  • 举报
回复
应该避免在select 里面使用*这个消耗query time
昵称被占用了 2013-02-04
  • 打赏
  • 举报
回复
考虑下使用全文检索,不过必须清楚,全文检索基于分词,与like 的结果不相同的
rfq 2013-02-04
  • 打赏
  • 举报
回复
千万级的数据 别用 sql 用 db2,oracle 做好从设计上改成分区表 或者小表
haitao 2013-02-02
  • 打赏
  • 举报
回复
全文索引是干这个的 但是好像用好的也不多
starseeker7 2013-02-02
  • 打赏
  • 举报
回复
还有个选择就是放弃MSSQL,采用NOSQL,,你就再也不用考虑表扫描的问题了
starseeker7 2013-02-02
  • 打赏
  • 举报
回复
。。。你这种需求在QW级别里显然就不科学了
若需求无法避免就只有走别的办法
1、切割表,根据业务划分把QW级别表切割为百万。可以根据时间/类型等方式
2、通过程序进行空间换时间,找个NB的服务器,把整个表的主键,lie1这两个字段存放在内存中,如此提高效能,用接口调用,对常见搜索字段,创建记录做主动缓存。
liulangdeyuyu 2013-02-02
  • 打赏
  • 举报
回复
引用 2 楼 starseeker7 的回复:
这种不合理的写法肯定不行 既然都是千万级别了,就必须尽量避免这种肯定会导致扫描的情况 比如专门为aa增加一个字段,等办法
select * from table1 where lie1 like '%aa%' 中aa是不固定的,也可能是bb,cc等 就是想查lie1中包含某字段的数据信息
liulangdeyuyu 2013-02-02
  • 打赏
  • 举报
回复
引用 1 楼 sundayzhao 的回复:
select * from table1 where lie1 like '%aa%' 这样的写法无法提高速度应改为 select * from table1 where lie1 like 'aa%' 左含有可以利用索引,当然了,lie1这个字段要建立索引。
这种查出来的不符合要求啊 比如:werweaawertwer,就查不出来
starseeker7 2013-02-02
  • 打赏
  • 举报
回复
这种不合理的写法肯定不行 既然都是千万级别了,就必须尽量避免这种肯定会导致扫描的情况 比如专门为aa增加一个字段,等办法
sundayzhao 2013-02-02
  • 打赏
  • 举报
回复
select * from table1 where lie1 like '%aa%' 这样的写法无法提高速度应改为 select * from table1 where lie1 like 'aa%' 左含有可以利用索引,当然了,lie1这个字段要建立索引。

34,838

社区成员

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

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