34,588
社区成员
发帖
与我相关
我的任务
分享
--测试数据
IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE tb(a int primary key,b int,c int)
INSERT tb SELECT 2,1,2
INSERT tb SELECT 1,2,3
INSERT tb SELECT 3,3,4
SELECT * FROM TB
/*
a b c
----------- ----------- -----------
1 2 3
2 1 2
3 3 4
(3 行受影响)
*/
CREATE INDEX IDX_tb_b ON tb(b)
SELECT * FROM TB
/*
a b c
----------- ----------- -----------
1 2 3
2 1 2
3 3 4
(3 行受影响)
*/
真是这样,只有两个字段,引擎更喜欢扫描聚集索引,有三个以上字段,从计划看,引擎先扫描的是聚集索引。--测试数据
IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE tb(a int primary key,b int)
INSERT tb SELECT 2,1
INSERT tb SELECT 1,2
INSERT tb SELECT 3,3
SELECT * FROM TB
/*
a b
----------- -----------
1 2
2 1
3 3
(3 行受影响)
*/
CREATE INDEX IDX_tb_b ON tb(b)
SELECT * FROM TB
/*
a b
----------- -----------
2 1
1 2
3 3
(3 行受影响)
*/
还真是这种情况-- 索引影响查询结果顺序
--测试数据
CREATE TABLE tb(a int,b int,c int)
CREATE CLUSTERED INDEX IDX_tb_a ON tb(a)
CREATE INDEX IDX_tb_b ON tb(b)
CREATE INDEX IDX_tb_c ON tb(c)
INSERT tb SELECT 1,3,2
INSERT tb SELECT 2,2,1
INSERT tb SELECT 3,1,3
--指定使用字段a上的索引
SELECT * FROM tb WITH(INDEX=IDX_tb_a)
/*--结果
a b c
---------------- ------------------ -----------
1 3 2
2 2 1
3 1 3
--*/
--指定使用字段b上的索引
SELECT * FROM tb WITH(INDEX=IDX_tb_b)
/*--结果
a b c
---------------- ------------------ -----------
3 1 3
2 2 1
1 3 2
--*/
--指定使用字段c上的索引
SELECT * FROM tb WITH(INDEX=IDX_tb_c)
/*--结果
a b c
---------------- ------------------ -----------
2 2 1
1 3 2
3 1 3
--*/