1000w以上的数据sqlserver存储方案

zylsky 2014-04-23 05:15:18
我每天有几千万的数据,每天0点清空表中的所有记录,但在白天的时候,我要查询表中有没有指定的数据是否存在,需要多表查询,,但查看的速度有点慢,做了索引,不知道有没有什么好的方法?我现在打开新建10张表,然后把数据按一定的算法,分别存到这10张表中,在查询时,再查指定的表,这样会不会减少一些数据库的压力?
...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
山寨DBA 2014-04-24
  • 打赏
  • 举报
回复
引用 5 楼 zylsky 的回复:
[quote=引用 3 楼 ap0405140 的回复:] 建议: 1.可以考虑用分区表. 2.查询时加(nolock)选项. 3.清空用truncate table. 4.定时重建或重整索引.
定时重建或重整索引可以弄在作业中吗?新手,只会用管理工具加索引,不会用代码. [/quote] 你先试试你自己的方法吧。 根据你业务的特殊性,个人觉得3楼的方法除了“truncate table和加nolock”之外,其他的三项并不合适,因为你的表每天都需要清空,千万的数据是当天插入的更新,分区表、定时重建索引都不现实。。。
山寨DBA 2014-04-24
  • 打赏
  • 举报
回复
引用 4 楼 zylsky 的回复:
[quote=引用 2 楼 hwhmh2010 的回复:] [quote=引用 楼主 zylsky 的回复:] 我每天有几千万的数据,每天0点清空表中的所有记录,但在白天的时候,我要查询表中有没有指定的数据是否存在,需要多表查询,,但查看的速度有点慢,做了索引,不知道有没有什么好的方法?我现在打开新建10张表,然后把数据按一定的算法,分别存到这10张表中,在查询时,再查指定的表,这样会不会减少一些数据库的压力?
每天0点清空表中数据,就是说你表中数据是在一天的时间内新增到千万级的喽,这样的话,即使有索引,效果也不大的,因为表数据更新频繁,索引碎片过多,而千万级的表又不可能不停的更新索引。。。 分开存储1张表倒是一个方法,可以一试[/quote]嗯,我现在生成了100张表,把数据分散到对应的表中,这样查起来就只有10来w的数据了.[/quote] 这样应该就比较好了。
LongRui888 2014-04-23
  • 打赏
  • 举报
回复
首先你说要减轻数据库的压力,那么加强监控,看看当前的数据库的压力如何,比如: cpu的使用率维持在多少,内存使用率,以及平均磁盘等待队列是多少,这些是总体的压力,然后具体到语句,你的语句一般需要运行多久? 看看能否优化? 当你truncate 表后,再次插入到表中后,对索引到不会有太大的影响,而是你需要更新一下统计信息,让sql server有正确的统计信息,做出正确的执行计划,这样才能让查询执行的更快。
zylsky 2014-04-23
  • 打赏
  • 举报
回复
引用 7 楼 luckyrandom 的回复:
这么模糊的问题,没法讨论。。如何判断是否有记录的?如果COUNT(*)>0之类的就是代码有待改进,也可能条件判断没合适索引。。情况太多了
嗯,我用的exists来判断有没有数据存在.
Q315054403 2014-04-23
  • 打赏
  • 举报
回复
这么模糊的问题,没法讨论。。如何判断是否有记录的?如果COUNT(*)>0之类的就是代码有待改进,也可能条件判断没合适索引。。情况太多了
Cloud_Hero 2014-04-23
  • 打赏
  • 举报
回复
回复楼上:定时重建或重整索引可以弄在作业中吗? 可以。如果你不熟悉,可以借用“维护计划向导”。 http://jimshu.blog.51cto.com/3171847/1007058
zylsky 2014-04-23
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:
建议: 1.可以考虑用分区表. 2.查询时加(nolock)选项. 3.清空用truncate table. 4.定时重建或重整索引.
定时重建或重整索引可以弄在作业中吗?新手,只会用管理工具加索引,不会用代码.
zylsky 2014-04-23
  • 打赏
  • 举报
回复
引用 2 楼 hwhmh2010 的回复:
[quote=引用 楼主 zylsky 的回复:] 我每天有几千万的数据,每天0点清空表中的所有记录,但在白天的时候,我要查询表中有没有指定的数据是否存在,需要多表查询,,但查看的速度有点慢,做了索引,不知道有没有什么好的方法?我现在打开新建10张表,然后把数据按一定的算法,分别存到这10张表中,在查询时,再查指定的表,这样会不会减少一些数据库的压力?
每天0点清空表中数据,就是说你表中数据是在一天的时间内新增到千万级的喽,这样的话,即使有索引,效果也不大的,因为表数据更新频繁,索引碎片过多,而千万级的表又不可能不停的更新索引。。。 分开存储1张表倒是一个方法,可以一试[/quote]嗯,我现在生成了100张表,把数据分散到对应的表中,这样查起来就只有10来w的数据了.
唐诗三百首 2014-04-23
  • 打赏
  • 举报
回复
建议: 1.可以考虑用分区表. 2.查询时加(nolock)选项. 3.清空用truncate table. 4.定时重建或重整索引.
山寨DBA 2014-04-23
  • 打赏
  • 举报
回复
引用 楼主 zylsky 的回复:
我每天有几千万的数据,每天0点清空表中的所有记录,但在白天的时候,我要查询表中有没有指定的数据是否存在,需要多表查询,,但查看的速度有点慢,做了索引,不知道有没有什么好的方法?我现在打开新建10张表,然后把数据按一定的算法,分别存到这10张表中,在查询时,再查指定的表,这样会不会减少一些数据库的压力?
每天0点清空表中数据,就是说你表中数据是在一天的时间内新增到千万级的喽,这样的话,即使有索引,效果也不大的,因为表数据更新频繁,索引碎片过多,而千万级的表又不可能不停的更新索引。。。 分开存储1张表倒是一个方法,可以一试
xdashewan 2014-04-23
  • 打赏
  • 举报
回复
这边今天正在讨论上亿条,你可以参考下 http://bbs.csdn.net/topics/390767370

22,209

社区成员

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

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