Mik*_*Dev 4 sql sql-server performance sql-server-2008
我的公司正在迁移到SQL Server 2008 R2.我们有一张包含大量存档数据的表格.使用此表的大多数查询在where语句中使用DateTime值.例如:
查询1
SELECT COUNT(*)
FROM TableA
WHERE
CreatedDate > '1/5/2010'
and CreatedDate < '6/20/2010'
Run Code Online (Sandbox Code Playgroud)
我假设分区是在CreatedDate上创建的,每个分区分布在多个驱动器上,我们有8个CPU,数据库中有5亿条记录,均匀分布在1/1/2008的日期到2011年2月24日(38个分区).这些数据也可以分为一年或其他持续时间,但让假设保持数月.
在这种情况下,我相信将使用8个CPU,并且在2010年1月5日和2010年6月20日之间的日期仅查询6个分区.
如果我运行以下查询并且我的假设与上面相同,那该怎么办呢?
查询2
SELECT COUNT(*)
FROM TableA
WHERE State = 'Colorado'
Run Code Online (Sandbox Code Playgroud)
有问题吗?
1.是否会查询所有分区?是
2.是否所有8个CPU都用于执行查询?是
3.性能是否优于查询未分区的表?是
4.还有什么我想念的吗?
5.分区索引如何帮助?
基于我对SQL Server 2008分区表和并行性的有限知识,我回答了上面的前三个问题.但如果我的答案不正确,你能否提供反馈,说明我的错误.
资源:
BarDev
分区绝不是提高性能的选择.您可以期待的最好的是与非分区表具有相同的性能.通常,您会得到随着分区数量增加的回归.对于性能,您需要索引,而不是分区.分区用于数据管理操作:ETL,归档等.有些人声称分区消除可能是性能提升,但是对于任何分区消除都可以将前导索引键放在同一列上,因为分区列将提供更好的结果.
是否会查询所有分区?
该查询需要索引State.否则是表扫描,并将扫描整个表.对分区表的表扫描总是比在相同大小的非分区表上扫描慢.索引本身可以在同一分区方案上对齐,但前导键必须是State.
是否所有8个CPU都用于执行查询?
并行性与分区无关,尽管存在相反的常见误解.分区和非分区范围扫描都可以使用并行运算符,它将是查询优化器的决定.
性能是否优于查询未分区的表?
没有
分区索引如何帮助?
索引会有所帮助.如果必须对齐索引,则必须对其进行分区.非分区索引将比分区索引更快,但切换/切换操作的索引对齐要求无法避免.
如果您正在考虑分区,那应该是因为您需要执行快速接入切换操作以删除保留策略期间之后的旧数据或类似内容.为了提高性能,您需要查看索引,而不是分区.
| 归档时间: |
|
| 查看次数: |
10475 次 |
| 最近记录: |