問題與MS SQL Server 2008+有關。索引搜索估計行
有表(比如,5-10M行)
CREATE TABLE [Test].[Persons](
[PersonId] [int] NOT NULL,
[FirstName] [varchar] (50) NOT NULL,
[LastName] [varchar] (50) NOT NULL,
[OtherNames] [varchar] (50) NULL,
[BirthDate] [varchar] (10) NULL
CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED ([PersonId] ASC)
)
隨着指數
CREATE NONCLUSTERED INDEX [IX_Persons_LastName_FirstName]
ON [Test].[Persons] ([LastName] ASC, [FirstName] ASC)
執行簡單的查詢像
SELECT [FirstName],[LastName],[BirthDate]
FROM [Test].[Persons] WHERE [LastName] = 'Decker'
我看到,有索引查找運算符,當鍵不在統計學組態時是確切的值,估計的行嚴重不同於實際行。
對於某些特定的鍵,它可以是約15個估計行與10k個實際行。
似乎在這種情況下,「估計行數」值是直接從AVG_RANGE_ROWS獲取相應的時間間隔(即下一個直方圖數值)。
預期行爲?我的意思是,SQL Server是否「知道」該值不準確,並在計算查詢成本時使用這個事實,或者這是一個潛在的錯誤查詢計劃問題?
嘗試使用SQL2008R2,2012,2014(全部都使用OLD基數估計器)據我所知,只有在處理查詢中的多個表時,新CE纔會更改內容。嘗試有趣,但我還沒有。
我想這是因爲統計樣本只猜測有多少DECKER你很可能有 - 嘗試一些常見和罕見的名字,看看是否有模式 – Cato
嘗試運行UPDATE STATISTICS –
@Tab Alleman統計信息在查詢執行之前用FULLSCAN更新。 – Marvin