首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-03-02 
聚集索引的具体用法还是不明白再次请教!谢谢对于两个表,主键相同,但是主键的顺序不同例如:表Atest1CREATET

聚集索引的具体用法还是不明白再次请教!谢谢
对于两个表,主键相同,但是主键的顺序不同例如:
表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的
但第一个就看表的统计信息而定了

热点排行