我有一个Material
表,其中有两列被编入索引。
CREATE NONCLUSTERED INDEX [MaterialName_PartType_idx] ON [dbo].[Material]
(
[MaterialName] ASC,
[PartType] ASC
)
CREATE NONCLUSTERED INDEX [PartType_idx] ON [dbo].[Material]
(
[PartType] ASC
)
当我查询
时SELECT PartType FROM Material
它使用索引扫描,但是当我查询
时SELECT MaterialName FROM Material
它使用表扫描。
SELECT MaterialName, PartType FROM Material
也使用表扫描
PartType
和MaterialName
都属于VARCHAR(50)
类型。
为什么不使用Index Scan?我正在使用SQL Server 2000。
答案 0 :(得分:2)
股票回答:这取决于。
列有多宽?如何"完整"是吗?表中有多少列?多少行?
如果只有两列,并且Material是一个varchar(100),通常填充25个或更多字符,并且PartType是一个整数, 如果有成千上万的行[注意那是4 ifs]那么:
order by
子句 - 你只需要以最便于SQL返回的顺序询问所有数据。如果你{{1}材料,赔率非常好SQL将使用该索引。