读书人

聚集索引的具体用法还是不明白再次请问

发布时间: 2012-03-02 14:40:28 作者: rapoo

聚集索引的具体用法还是不明白再次请教!谢谢
对于两个表,主键相同,但是主键的顺序不同例如:
表Atest1
CREATE TABLE [develop].[Atest1] (
[YEAR_DATE_CD] [smalldatetime] NOT NULL ,
[PRICELIST_CD] [int] NOT NULL ,
[JAN] [varchar] (13) COLLATE Japanese_CI_AS NOT NULL ,
[DATE_CD] [int] NOT NULL ,
[PRODUCT_NM] [varchar] (40) COLLATE Japanese_CI_AS NOT NULL ,
[PRODUCT_SHORT_NM] [varchar] (20) COLLATE Japanese_CI_AS NOT NULL ,
[STANDARD_NM] [varchar] (20) COLLATE Japanese_CI_AS NOT NULL ,
[STANDARD_SHORT_NM] [varchar] (12) COLLATE Japanese_CI_AS NOT NULL ,
[PROD_LEVEL1_CD] [smallint] NOT NULL ,
[PROD_LEVEL2_CD] [smallint] NOT NULL ,
[PROD_LEVEL3_CD] [smallint] NOT NULL ,
[PROD_LEVEL4_CD] [smallint] NOT NULL ,
[PROD_LEVEL5_CD] [smallint] NOT NULL ,
[PROD_LEVEL6_CD] [smallint] NOT NULL ,
[PROD_LEVEL7_CD] [smallint] NOT NULL ,
[RETAIL_PRICE] [money] NOT NULL ,
[UNIT_COST_PRICE] [money] NOT NULL ,
[VENDOR_CD] [int] NOT NULL ,
[TAX_TYP] [tinyint] NOT NULL ,
[AMEND_DT] [smalldatetime] NOT NULL ,
[UPDATE_DT] [smalldatetime] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [develop].[Atest1] ADD
CONSTRAINT [PK_Atest1] PRIMARY KEY CLUSTERED
(
[YEAR_DATE_CD],
[PRICELIST_CD],
[JAN],
[DATE_CD]
) ON [PRIMARY]
GO

表Atest2
CREATE TABLE [develop].[Atest2] (
[DATE_CD] [int] NOT NULL ,
[YEAR_DATE_CD] [smalldatetime] NOT NULL ,
[PRICELIST_CD] [int] NOT NULL ,
[JAN] [varchar] (13) COLLATE Japanese_CI_AS NOT NULL ,

[PRODUCT_NM] [varchar] (40) COLLATE Japanese_CI_AS NOT NULL ,
[PRODUCT_SHORT_NM] [varchar] (20) COLLATE Japanese_CI_AS NOT NULL ,
[STANDARD_NM] [varchar] (20) COLLATE Japanese_CI_AS NOT NULL ,
[STANDARD_SHORT_NM] [varchar] (12) COLLATE Japanese_CI_AS NOT NULL ,
[PROD_LEVEL1_CD] [smallint] NOT NULL ,
[PROD_LEVEL2_CD] [smallint] NOT NULL ,
[PROD_LEVEL3_CD] [smallint] NOT NULL ,
[PROD_LEVEL4_CD] [smallint] NOT NULL ,
[PROD_LEVEL5_CD] [smallint] NOT NULL ,
[PROD_LEVEL6_CD] [smallint] NOT NULL ,
[PROD_LEVEL7_CD] [smallint] NOT NULL ,
[RETAIL_PRICE] [money] NOT NULL ,
[UNIT_COST_PRICE] [money] NOT NULL ,
[VENDOR_CD] [int] NOT NULL ,
[TAX_TYP] [tinyint] NOT NULL ,
[AMEND_DT] [smalldatetime] NOT NULL ,
[UPDATE_DT] [smalldatetime] NOT NULL


) ON [PRIMARY]
GO

ALTER TABLE [develop].[Atest2] ADD
CONSTRAINT [PK_Atest2] PRIMARY KEY CLUSTERED
(
[DATE_CD],
[YEAR_DATE_CD],
[PRICELIST_CD],
[JAN]
) ON [PRIMARY]
GO
同时两个表里面的数据是完全相同的,都为10w条。
执行下面的语句
select
*
from
Atest1
where
date_cd=1

select
*
from
Atest2
where
date_cd=1


--------------------------------------------------
为什么第2种情况下进行的全表搜索,而不是按照索引进行查询呢?


[解决办法]
你说反了吧
复合index对顺序敏感
你的第二个会根据index去SEEK的
但第一个就看表的统计信息而定了

读书人网 >SQL Server

热点推荐