SQL*_*mer 7 sql-server statistics index-statistics sql-server-2014 sql-server-2016
我有一个包含 5,000,000 条记录的表,DateOfBirth 列分布在 1950 年和 2007 年之间。索引的统计直方图只有两个 RANGE_HI_KEY。鉴于记录的数量和字段的选择性,我觉得直方图应该有更多的桶。
谁能向我解释为什么 SQL Server 只使用两个 RANGE_HI_KEY ?
注意:我在 2014 年和 2016 年得到相同的统计数据
桌子
CREATE TABLE [dbo].[Person](
[BusinessEntityID] [INT] NOT NULL,
[PersonType] [NCHAR](2) NOT NULL,
[NameStyle] [dbo].[NameStyle] NOT NULL,
[Title] [NVARCHAR](8) NULL,
[FirstName] [dbo].[Name] NOT NULL,
[MiddleName] [dbo].[Name] NULL,
[LastName] [dbo].[Name] NOT NULL,
[Suffix] [NVARCHAR](10) NULL,
[EmailPromotion] [INT] NOT NULL,
[rowguid] [UNIQUEIDENTIFIER] NOT NULL,
[ModifiedDate] [DATETIME] NOT NULL,
[DateOfBirth] [DATE] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
指数
CREATE NONCLUSTERED INDEX [IX_dbo_Person_DateOfBirth]
ON [dbo].[Person] ( [DateOfBirth] ASC )
Run Code Online (Sandbox Code Playgroud)
直方图
Statistics for INDEX 'IX_dbo_Person_DateOfBirth'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Name Updated Rows Rows Sampled Steps Density Average Key Length String Index
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IX_dbo_Person_DateOfBirth Jun 24 2016 7:16PM 5000000 5000000 2 0.004236792 3 NO 5000000
All Density Average Length Columns
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.720544E-05 3 DateOfBirth
Histogram Steps
RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1/1/1950 12:00:00 AM 0 255 0 1
12/31/2007 12:00:00 AM 4999537 208 21182 236.0276
Run Code Online (Sandbox Code Playgroud)
小智 3
好简单。查找以下结果:
select datediff(day,'1/1/1950','12/31/2007');
Run Code Online (Sandbox Code Playgroud)
这意味着DISTINCT_RANGE_ROWS + 1
SQL Server 认为您的所有 DOB 在该范围内大致均匀分布,平均每天有 236 个项目。
查询您的数据并查看是否有任何轮廓,例如:缺少日期范围或每天 >1000 DOB。
如果你这样做,那么这对引擎来说就是一个问题。
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |