sqlserver2008R2上亿大表查询优化问题

lxljw1314 2016-04-06 09:12:02
如题,这个问题搜索了很多,看下来目前就是索引+分区的解决方案。
我的是数据仓库表,为之后每天的cube更新用的,每次都要select很多个字段,之前在日期和筛选字段都建过索引了,但是因为大表并不是做单纯的某个字段查询,所以速度还是很慢。因为在实际环境,怕影响正常使用,暂时没有做分区操作,将近两亿的大表分区起来应该也要耗费很长时间吧?
我有几个问题不明白,想问下:
1.如果对大表进行分区操作,会不会影响后面的cube更新数据?我看好像是逻辑上分了多个,实际查询还是一个表的。
2.因为多数情况是按时间查询,我想按年份分区,一年一个分区,但是有些年份的记录很少,这样分会不会不合理呢?有影响吗?
3.因为当前已经在大表上建立了聚集和非聚集索引,分区的时候要怎么操作?先删除索引么?分区之后还需要为每个分区创建索引么?

除了以上的办法,是否还有其他解决方案呢,请高手们不吝赐教。
...全文
364 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_w610 2019-04-13
  • 打赏
  • 举报
回复
建议做分表。
li_shiye 2016-04-07
  • 打赏
  • 举报
回复
http://mp.weixin.qq.com/s?__biz=MzAwMzI3Njc1MA==&mid=401674218&idx=1&sn=f2aefe372dee874a67bc8fee8d0a1f0a&scene=1&srcid=0407mxoy0bQcXLqSw4OYyCE5#rd 今天刚好在微信看到一个这个,不知道是否对你有用,可以看下
lxljw1314 2016-04-06
  • 打赏
  • 举报
回复
@ yangb0803 嗯,我也看到很多人说了分区并不一定能提升查询性能,只是便于维护管理。现在主要问题是前期表设计很粗糙没怎么考虑后期数据量增长到这么大会产生的问题,现在重新修改表结构不太可能了,因为这个大表还是作为数据源给其他视图还有cube用的,如果要分割成多个小表,改动也是很大了。头疼。。。
道玄希言 2016-04-06
  • 打赏
  • 举报
回复
分区并不一定能提高你的查询速度.
道玄希言 2016-04-06
  • 打赏
  • 举报
回复
2亿数据的表优化, 估计得考虑多方面了. 包括表查询语句的优化, 索引, 分区等, 甚至如果涉及到了jion 的查询, 都可考虑某些字段的冗余设计. 分区方案在多硬盘,将分区放入不同的磁盘, 这样可以优化磁盘I/O的瓶颈问题,到以后维护, 比如三年前的数据我不要了, 直接删除对应的分区就可以了. 看你的描述, 你只是数据总量累积到很大了, 并不是并发读写很大, 其实你也可以考虑分表来存, 比如一年一个表好了, 如果涉及到跨年的数据查询, 你查询语句复杂点, union 链接两个表的查询结果集了.
微软SQL Server 2008 R2中的资源分配方式与SQL Server 2005中的方式相比是一种完全不同的过程。利用资源控制器,在SQL Server 2008 R2中解决方案供应商有切实可用的方法管理CPU和内存。   资源消耗是长期以来困扰使用SQL Server的解决方案供应商的基本问题之一。任何服务器,不管它是物理的还是虚拟的,供处置的CPU和内存池都是有限的。过去,这一简单的事实给SQL Server带来许多麻烦,因为它通常是资源非常敏感的应用。   如果服务器上只托管了唯一一个数据库的话,那么SQL Server资源消耗并不是个严重的问题。但是如果有多个数据库在用着,那就真的变成一个问题了,因为各种数据库都会竞争同样一组CPU和内存资源。   在SQL Server 2005中,对这个问题可以接受的解决方案通常是为每个数据库创建独立的SQL Server实例,利用处理器亲和度为每个数据库实例分配资源。这种技术的问题是一旦资源被分配给SQL Server实例,他们对其他SQL Server实例就不可用了。结果,如果一个数据库的负载特别重,它也不可能从其他SQL实例暂借服务器的CPU资源,虽然这个实例上的资源此时可能什么都没做。   一些解决方案供应商也曾尝试利用服务器虚拟化作为给个别SQL Server数据库分配资源的一种途径。在这种模型中,每台虚拟机只托管一个SQL Server数据库。这种方法也可行,但是虚拟机和他们的操作系统也消耗了一些本该用于SQL Server的服务器资源。此外,还依赖于你使用的虚拟化软件,以按需分配为基础的资源动态分配可能有些困难或者不可能实现。   微软最终针对SQL Server 2008 R2中的资源分配问题创建了一套可行的解决方案,引入了叫做资源控制器的新组件。这个资源控制器是可以通过微软SQL Server Management Studio访问的,它可以定义资源池,每个资源池都包含负载工作组,如下图所示:
Microsoft SQL Server 2008 Service Pack 3 (SP3) 现在可供下载。我们不仅控制着产品更改,而且还投入了很大的力量来简化 Service Pack 的部署和管理。对于客户来说,Microsoft SQL Server 2008 Service Pack 3 中有这样几项重要改进:   从 SQL Server 的旧版本升级到 SQL Server 2008 SP3 的过程体验得到了改进。另外,我们增强了安装体验的性能和可靠性。   在 SQL Server Integration Services 日志中,现在能看到在数据流中发送的总行数。   在启用了“缩减数据库”选项的情况下创建维护计划时的警告信息得到了改进。   在启用了透明数据加密的情况下解决数据库问题,而且即使删除了证书也能使用数据库。   在 DTA(数据库调节顾问)引用经过索引的“空间数据类型”列时,查询结果经过了优化。   用户在并行执行计划中使用“序列函数”(如 Row_Numbers())可获得优异的体验。   Microsoft SQL Server 2008 Service Pack 2 不是安装 SQL Server 2008 Service Pack 3 的先决条件。可以使用这些包升级以下 SQL Server 2008 版本:   Enterprise   Standard   Evaluation   开发人员   Workgroup   SQL Server 2008 SP3 包含 SQL Server 2008 SP2 累积更新包 1 至 4 的累积更新,以及对通过客户反馈平台所收集问题的修复。它包括可支持性增强以及通过 Windows 错误报告收集的问题。   支持的操作系统:Windows 7;Windows Server 2003;Windows Server 2008;Windows Server 2008 R2;Windows Vista Windows 7; Windows8, Windows Server 2003 Service Pack 2 和 R2;Windows Server 2008 Service Pack 1 和 Service Pack 2;Windows Server 2008 R2;Windows Vista Service Pack 1 和 Service Pack2;Windows XP Service Pack 332 位系统 (x86)具有 Intel Pentium III 600 MHz(或同等性能的兼容处理器)或速度更快的处理器(建议使用 1 GHz 或速度更快的处理器)的 PC64 位系统(x64、ia64)1 GHz 或速度更快的处理器最低 512 MB 的 RAM(建议使用 1 GB 或更高的 RAM)675 MB 可用硬盘空间。

22,210

社区成员

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

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