关于sql server 千万级 的模糊查询

失落的神庙 2013-10-25 01:41:38

不要问我千万级了 干嘛还用 sql server
奇葩年年有 你们懂的。我也不解释了。


1.模糊查询
多字段模糊
比如like
表中有名字 身份证 地址
我写了一个模糊查询 武汉 则2-3秒 查询出1000条记录(使用top 1000,否则死掉。不解释0.0!)

但是我写三个字以上 则死了
也就是说 它匹配字段越多 就越慢。 难道需要做个选项选择哪个字段模糊查询么。

2.随机查询1000
目前用的newid() 用的 Id between x and y 在范围内随机找topN 条


求大神优化

数据库与客户端为局域网
...全文
576 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2013-10-25
  • 打赏
  • 举报
回复
好的。结贴。
  • 打赏
  • 举报
回复
或者让你公司请专门做数据服务的公司来优化,当然收费可不便宜
  • 打赏
  • 举报
回复
建议让你公司买资料书,网上的资料不少,但都显得零散,实际使用才知道,还有全文索引的自动更新策略,可以使用更改跟踪,可以最大限度的保证数据与索引的同步 http://msdn.microsoft.com/zh-cn/library/ms187025(v=sql.100).aspx
失落的神庙 2013-10-25
  • 打赏
  • 举报
回复
嗯。 不知道我这个想法可否 做成 wcf形式 将表分割成十万级 并发查询然后将结果处理后返回
失落的神庙 2013-10-25
  • 打赏
  • 举报
回复
引用 8 楼 dongxinxi 的回复:
[quote=引用 4 楼 wawd74520 的回复:] [quote=引用 2 楼 dongxinxi 的回复:] like 就算是top100,也是要进行表扫描的,如果很不幸,这100纪录都在靠后的位置,一样死掉,这是和实际纪录的命中率有关系的 用全文索引,别说千万级,亿级都可以 别那么歧视MS的东西
如果between 一段里面的话 就会好。这个。有什么办法达到 秒级么 分表或者什么的 都可以[/quote] sql编译后,会自动优化的,如果有主键或者能明显缩小查询范围的,肯定会优先查询,就像你加的between条件一样,效率当然会大幅提升[/quote] 嗯。 如果这2000W数据重新 构架。 怎么样设计比较方便全文模糊查找
  • 打赏
  • 举报
回复
一般大数据量都会将表分区,策略根据时间情况选择,一般可以按时间或者地区分区 然后将条件落在某一个分区里去查询 用上全文索引+分区表,一般就可以控制在秒级
  • 打赏
  • 举报
回复
引用 4 楼 wawd74520 的回复:
[quote=引用 2 楼 dongxinxi 的回复:] like 就算是top100,也是要进行表扫描的,如果很不幸,这100纪录都在靠后的位置,一样死掉,这是和实际纪录的命中率有关系的 用全文索引,别说千万级,亿级都可以 别那么歧视MS的东西
如果between 一段里面的话 就会好。这个。有什么办法达到 秒级么 分表或者什么的 都可以[/quote] sql编译后,会自动优化的,如果有主键或者能明显缩小查询范围的,肯定会优先查询,就像你加的between条件一样,效率当然会大幅提升
jrl5365 2013-10-25
  • 打赏
  • 举报
回复
全文索引一个方法 要查询的字段加索引也是一个办法 like本来就是比较费资源的!!
失落的神庙 2013-10-25
  • 打赏
  • 举报
回复
引用 5 楼 nice_fish 的回复:
[quote=引用 4 楼 wawd74520 的回复:] [quote=引用 2 楼 dongxinxi 的回复:] like 就算是top100,也是要进行表扫描的,如果很不幸,这100纪录都在靠后的位置,一样死掉,这是和实际纪录的命中率有关系的 用全文索引,别说千万级,亿级都可以 别那么歧视MS的东西
如果between 一段里面的话 就会好。这个。有什么办法达到 秒级么 分表或者什么的 都可以[/quote] 加索引嘛。网上下的2000w的数据?我这边加了索引速度还算满不错的。[/quote] 嗯 网上下的。 - -7G多。
  • 打赏
  • 举报
回复
引用 4 楼 wawd74520 的回复:
[quote=引用 2 楼 dongxinxi 的回复:] like 就算是top100,也是要进行表扫描的,如果很不幸,这100纪录都在靠后的位置,一样死掉,这是和实际纪录的命中率有关系的 用全文索引,别说千万级,亿级都可以 别那么歧视MS的东西
如果between 一段里面的话 就会好。这个。有什么办法达到 秒级么 分表或者什么的 都可以[/quote] 加索引嘛。网上下的2000w的数据?我这边加了索引速度还算满不错的。
失落的神庙 2013-10-25
  • 打赏
  • 举报
回复
引用 2 楼 dongxinxi 的回复:
like 就算是top100,也是要进行表扫描的,如果很不幸,这100纪录都在靠后的位置,一样死掉,这是和实际纪录的命中率有关系的 用全文索引,别说千万级,亿级都可以 别那么歧视MS的东西
如果between 一段里面的话 就会好。这个。有什么办法达到 秒级么 分表或者什么的 都可以
---涛声依旧--- 2013-10-25
  • 打赏
  • 举报
回复
sp_help 此表名 看看有没有建立索引,没有的话根据实际情况合理地建立索引了(程序里面经常按哪些字段查询的,建议建立索引)
  • 打赏
  • 举报
回复
like 就算是top100,也是要进行表扫描的,如果很不幸,这100纪录都在靠后的位置,一样死掉,这是和实际纪录的命中率有关系的 用全文索引,别说千万级,亿级都可以 别那么歧视MS的东西
失落的神庙 2013-10-25
  • 打赏
  • 举报
回复
为了激起程序媛对此贴的关注 我特此透露 这个是某个酒店开房记录表。 说不定有屌丝的你哦。 赶紧来吧。亲。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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