【问题标题】:how to calculate performance of an index sql server如何计算索引 sql server 的性能
【发布时间】:2014-06-04 06:32:12
【问题描述】:

我有一个非常大的表,目前有 7 亿行。预计随着时间的推移,这张桌子将增长到 7000 亿,我的问题与这张桌子的设计有关,以及它是否会在这种规模下继续合理地执行。

我想知道当表从当前的 7 亿行增长到 7000 亿行时,查询的性能会下降多少?

表格相当简单,表格上有一个索引 - 下面是表格

CREATE TABLE [dbo].[datData](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Field_ID] [int] NOT NULL,
    [Date] [datetime] NOT NULL,
    [Value] [decimal](28, 10) NULL
) ON [PRIMARY]

索引是

CREATE UNIQUE CLUSTERED INDEX [IX_datData] ON [dbo].[datData]
(
    [Field_ID] ASC,
    [Date] ASC
)

对该表的典型查询是:

SELECT sum(d.value) 
    FROM datdata d 
    WHERE d.Field_ID = 21385 and d.Date > '1-Jan-2014' and d.Date < '1-Feb-2014'

目前表格中有大约 16,000 个字段 ID,并且日期字段是连续的。这使得每个字段 ID 平均有 43,750 条记录,我预计随着数据库增长到 7000 亿大小,这个比率将基本保持不变。这意味着在 7000 亿行中,我预计我们将拥有 1600 万个字段 ID。

尽管这种增长需要一段时间才能实现 - 我想更好地了解是否会出现严重的瓶颈,并开始计划因这些变化而可能需要的数据库更改。

【问题讨论】:

  • 43750 个日期/fieldid = 120 年还是 [Date] 是时间戳?另外,如果 Field_ID+Date 是唯一的,为什么还要使用 Identity?
  • 这是您将用于表的唯一查询吗?在表上有 ID 列有什么意义你可以在表中创建另一个索引 xolumn 吗?你用的是什么版本的sql server?
  • 您会注意到日期是日期时间,连续日期之间的间隔可以从 1 秒到几分钟不等。大多数相隔 15 分钟。此外 - 您可以有相同的 field_id 的重复日期条目,因此需要 ID 列。 SQL Server 版本目前是 2012,但可能很快会升级到 2014。查询各不相同,但始终根据 Field_ID 和 Date 进行过滤。
  • 抱歉 - 只是再看一遍,可能不需要 ID 字段,因为索引是唯一聚集的。但是我会注意到这不会影响这个问题,因为我想深入了解 7 亿行和 7000 亿行之间的性能差异。有没有人可以帮助回答这个问题
  • 我相信这个问题的答案可能与聚集索引的结构和创建的页面有关 - 请参阅此文档 (technet.microsoft.com/en-us/library/jj835095(v=sql.110).aspx)。也许bTree的大小以及可以将多少加载到内存中?这是关于内存的答案,有多少内存? bTree 如何查找上述索引?希望有人可以提供帮助?

标签: sql sql-server database indexing


【解决方案1】:

在 sql server management studio 中插入查询并选择“显示估计的执行计划”选项以计算索引 sql server 的性能。

这可以为您提供有关数据库性能的大量信息,以及创建的索引对性能的影响等等。

您可以在此处找到有关该主题的更多信息: http://technet.microsoft.com/en-us/library/ms178071%28v=sql.105%29.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 2010-11-08
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多