为什么基于聚集索引第二个键的搜索不能提高sql server的性能?
我已经创建了一个用于测试聚集索引的数据库。数据库有两个表HeapTable和IndexTable,每个表有五列Int-Type。之后,在while循环的帮助下,表中填充了50000行。最后,我为IndexTable创建一个聚集索引,如下所示,并根据两个条件从两个表中进行选择为什么基于聚集索引第二个键的搜索不能提高sql server的性能?,sql,Sql,我已经创建了一个用于测试聚集索引的数据库。数据库有两个表HeapTable和IndexTable,每个表有五列Int-Type。之后,在while循环的帮助下,表中填充了50000行。最后,我为IndexTable创建一个聚集索引,如下所示,并根据两个条件从两个表中进行选择 CREATE UNIQUE CLUSTERED INDEX IX_1 ON IndexTable (IndexTable_Column1, IndexTable_Column2, IndexTable_Column
CREATE UNIQUE CLUSTERED INDEX IX_1
ON IndexTable (IndexTable_Column1, IndexTable_Column2, IndexTable_Column3)
条件1:
条件1的结果:
表'HeapTable'。逻辑读数188
表“可索引”。逻辑读取2
条件2:
条件2的结果:
表'HeapTable'。逻辑读数188
表“可索引”。逻辑读取182
IndexTable的聚集索引包括IndexTable_Column2,但性能没有得到改进。为什么?
感谢您的帮助。因为索引是先按第1列排序,然后按第2列排序的。想象一下,电话簿是按姓氏和姓氏排序的——这不允许您快速搜索所有名为Sam的人。要做到这一点,您需要分别为该列编制索引。
SELECT *
FROM HeapTable AS H
WHERE H.HeapTable_Column1 = 10;
SELECT *
FROM IndexTable AS I
WHERE I.IndexTable_Column1 = 10;
SELECT *
FROM HeapTable AS H
WHERE H.HeapTable_Column2 = 10;
SELECT *
FROM IndexTable AS I
WHERE I.IndexTable_Column2 = 10;