Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么基于聚集索引第二个键的搜索不能提高sql server的性能?_Sql - Fatal编程技术网

为什么基于聚集索引第二个键的搜索不能提高sql server的性能?

为什么基于聚集索引第二个键的搜索不能提高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

我已经创建了一个用于测试聚集索引的数据库。数据库有两个表HeapTable和IndexTable,每个表有五列Int-Type。之后,在while循环的帮助下,表中填充了50000行。最后,我为IndexTable创建一个聚集索引,如下所示,并根据两个条件从两个表中进行选择

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;