关于SQL Server 2014中的基数估计,官方文档Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator里有大量细节介绍,但是全部是英文,估计也没有几个人仔细阅读。那么SQL Server 2014中基数估计的预估行数到底是怎么计算的呢? 有哪一些规律呢?我们下面通过一些例子来初略了解一下,下面测试案例仅供参考,如有不足或肤浅的地方,敬请指教!

 

下面实验测试的环境主要为SQL Server 2014 SP2 (Standard Edition (64-bit)) 具体版本号为12.0.5000.0 ,如有在其它版本测试,后面会做具体说明。如下所示,我们先创建一个测试表并插入一些测试数据后,方便后面的测试工作。

IF EXISTS(SELECT 1 FROM sys.objects WHERE type='U' AND name='TEST_ESTIMATED_ROW')
BEGIN
    DROP TABLE TEST_ESTIMATED_ROW;
END
 
IF NOT EXISTS(SELECT 1 FROM sys.objects WHERE type='U' AND name='TEST_ESTIMATED_ROW')
BEGIN
        CREATE TABLE TEST_ESTIMATED_ROW
        (
            ID        INT,
            NAME    VARCHAR(24)
        )
END
GO
 
DECLARE @Index INT =1;
 
WHILE @Index <= 100
BEGIN
 
    INSERT INTO TEST_ESTIMATED_ROW
    VALUES(10, 'id is 10');
 
    SET @Index+=1;
END
GO
 
DECLARE @Index INT =1;
 
WHILE @Index <= 200
BEGIN
 
    INSERT INTO TEST_ESTIMATED_ROW
    VALUES(20, 'id is 20');
 
    SET @Index+=1;
END
GO
 
DECLARE @Index INT =1;
 
WHILE @Index <= 300
BEGIN
 
    INSERT INTO TEST_ESTIMATED_ROW
    VALUES(30, 'id is 30');
 
    SET @Index+=1;
END
GO
 
 
DECLARE @Index INT =1;
 
WHILE @Index <= 400
BEGIN
 
    INSERT INTO TEST_ESTIMATED_ROW
    VALUES(40, 'id is 40');
 
    SET @Index+=1;
END
GO
 
 
DECLARE @Index INT =1;
 
WHILE @Index <= 500
BEGIN
 
    INSERT INTO TEST_ESTIMATED_ROW
    VALUES(50, 'id is 50');
 
    SET @Index+=1;
END
GO
 
 
CREATE INDEX IX_TEST_ESTIMATED_ROW_N1 ON TEST_ESTIMATED_ROW(ID);
GO

相关文章:

  • 2021-10-22
  • 2021-04-29
  • 2021-10-06
  • 2021-10-31
  • 2021-05-29
  • 2021-09-23
  • 2022-01-07
猜你喜欢
  • 2021-05-15
  • 2021-06-16
  • 2022-12-23
  • 2021-10-06
  • 2022-12-23
  • 2022-12-23
  • 2021-11-25
相关资源
相似解决方案