sql2008 一个表有二千多万行数据,求数据优化

郁闷的小星 2013-12-09 03:37:54
公司系统用的数据库是SQL2008,听说之前一个表的数据只有几百万的时候查询速度是非常快的,但到了今年11
月的时候这个表的数据已经有了二千多万行了,查询速度变的非常慢。
当然这个表的索引肯定是有的,偶尔也会做做DBCC dBReIndex
可能是SQL当一个表的数据行达到了千万级别时,查询速度受影响非常大吧
除了删除或转移部分表的数据外还有其它方法,还有其它方面优化来提高查询速度没?
求建议!!!!!!!!
...全文
516 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞啊子 2013-12-10
  • 打赏
  • 举报
回复
2000万就要分区, 那让我们这些 5000万~上亿条的数据怎么办! 先不用分区,分析其他原因。 你说 用主表的时间字段做为条件,那查询出来的结果有多少条呢?
KeepSayingNo 2013-12-10
  • 打赏
  • 举报
回复
两个表进行关联的时候,建议先用条件分别作用于各个表,然后再将结果进行关联,这样速度比较快,个人觉得单张表2000W数据不算大,是一个合理的范围,如果超过千万级,到上亿级就需要考虑分区表,我们现在项目有个库里各张表的数据都是千万级的。
javaoraspx 2013-12-10
  • 打赏
  • 举报
回复
标志下 .
RUNBEAR 2013-12-10
  • 打赏
  • 举报
回复
2000W真不算多。还是着手查询优化吧。
發糞塗牆 2013-12-09
  • 打赏
  • 举报
回复
执行计划才能看出问题在哪里,我预估要么是进行了扫描,要么用了低效的JOIN算法,要么就是WHERE条件不够高效,如果你不贴执行计划,估计把问题会延长很久...很久...很久,然后就....没有然后了
LongRui888 2013-12-09
  • 打赏
  • 举报
回复
引用 14 楼 ss270991 的回复:
[quote=引用 12 楼 luckyrandom 的回复:] 分区的重点在数据可管理、可维护性上,非性能上,别被误导 性能问题只能实事求是,实际诊断和分析,才会有客观的改进方式和方法
呵呵,谢谢各们提出宝贵意见,我就一个新手应该多多学习。。。 可能原因是从表的索引经常乱吧。。。。刚才用了十几分钟对从表做了DbReIndex, 发现速度有明显提升。[/quote] 那就可能是索引的碎片,或者是统计信息的不准确导致的。
郁闷的小星 2013-12-09
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
木有人理我
不管怎样。。还是要感谢你的。。。
LongRui888 2013-12-09
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
木有人理我
版主,我支持你 他应该把代码贴出来看看,不过也有可能涉及到公司的一些机密。 不过执行计划还是可以贴出来看看的
郁闷的小星 2013-12-09
  • 打赏
  • 举报
回复
引用 12 楼 luckyrandom 的回复:
分区的重点在数据可管理、可维护性上,非性能上,别被误导 性能问题只能实事求是,实际诊断和分析,才会有客观的改进方式和方法
呵呵,谢谢各们提出宝贵意见,我就一个新手应该多多学习。。。 可能原因是从表的索引经常乱吧。。。。刚才用了十几分钟对从表做了DbReIndex, 发现速度有明显提升。
發糞塗牆 2013-12-09
  • 打赏
  • 举报
回复
木有人理我
Q315054403 2013-12-09
  • 打赏
  • 举报
回复
分区的重点在数据可管理、可维护性上,非性能上,别被误导 性能问题只能实事求是,实际诊断和分析,才会有客观的改进方式和方法
LongRui888 2013-12-09
  • 打赏
  • 举报
回复
引用 6 楼 ss270991 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 可以按照日期字段,进行分区,比如一个月一个分区。 另外:听说之前一个表的数据只有几百万的时候查询速度是非常快的 能把你的查询语句,贴出来看看不,看这个语句的特征,从语句的级别能不能优化
查询语句非常简单,就是二个千万级别的表关联,然后用主表的时间字段做为条件,以前查一天基本是瞬发的, 现在查一天要30S左右,我说的非常慢是和以前瞬发做比较的[/quote] 另外, 你是如何建的索引呢,照理,查询1天的数据,就应该是瞬间出来的,不管是几百万还是二千万的表。 在关联的字段上也有有索引,不然,也会很慢
LongRui888 2013-12-09
  • 打赏
  • 举报
回复
引用 8 楼 ss270991 的回复:
[quote=引用 1 楼 yupeigu 的回复:] 你可以采用分区表的
SQL可以建表分区?不是要ORACLE才可以建表分区的?[/quote] 呵呵,sql server 2005开始,就支持分区表了哈,所以你们用的sql server 2008肯定是支持分区表的。
發糞塗牆 2013-12-09
  • 打赏
  • 举报
回复
sql server 2005就可以了,不过要看版本,标准版不支持分区
郁闷的小星 2013-12-09
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
你可以采用分区表的
SQL可以建表分区?不是要ORACLE才可以建表分区的?
發糞塗牆 2013-12-09
  • 打赏
  • 举报
回复
贴执行计划出来看看吧
郁闷的小星 2013-12-09
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
可以按照日期字段,进行分区,比如一个月一个分区。 另外:听说之前一个表的数据只有几百万的时候查询速度是非常快的 能把你的查询语句,贴出来看看不,看这个语句的特征,从语句的级别能不能优化
查询语句非常简单,就是二个千万级别的表关联,然后用主表的时间字段做为条件,以前查一天基本是瞬发的, 现在查一天要30S左右,我说的非常慢是和以前瞬发做比较的
LongRui888 2013-12-09
  • 打赏
  • 举报
回复
我原来的公司,一个主要的业务表有超过1.5亿条记录,但是每次查询,做报表,基本上只会用到600-700w条数据,不会用整个表的所有数据。 所以建立了一个索引,速度非常快,而且还与其他的千万级别的大表进行关联,计算,基本上10秒内就能返回结果
小魚人 2013-12-09
  • 打赏
  • 举报
回复
這個是要看你sql語句吧?
發糞塗牆 2013-12-09
  • 打赏
  • 举报
回复
2000万不算大,如果你全表扫描,那当然越来越慢,具体看你的语句
加载更多回复(2)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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