表分区后不走索引?
查询语句
SQL code
select id,[收货人名称] ,[申报日期] ,[商品编码] ,[价格] FROM dbo.dc_Russia WHERE  [申报日期] between '2010-1-1 0:00:00' and '2011-8-11 0:00:00' and   [商品编码]='9026'
  索引创建是
SQL code
CREATE NONCLUSTERED INDEX [index_hs_date] ON [dbo].[dc_Russia] 
(
    [商品编码] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [Data_Partition_Scheme]([申报日期])
  [Data_Partition_Scheme]([申报日期])是表分区方案
执行计划却是要表扫描,为什么呢?
------解决方案-------------------- 探讨 ------解决方案-------------------- 建议如下建表
CREATE TABLE [dbo].[dc_Russia](
   [id] [int] IDENTITY(1,1) NOT NULL,
   [商品编码] [nvarchar](50) ,
   [发货人名称] [nvarchar](max) ,
   [商品描述] [nvarchar](255) ,
   [申报日期] [datetime] NULL,
  CONSTRAINT [PK_dc_Russia] PRIMARY KEY CLUSTERED (
   [申报日期],
   [id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [Data_Partition_Scheme]([申报日期])
) ON [Data_Partition_Scheme]([申报日期])
------解决方案-------------------- 注意红色部分
------解决方案-------------------- 一般表应该根据分区列聚集,才能有好的查询效果
------解决方案-------------------- 一年一个分区哦?
  '2010-1-1 0:00:00' and '2011-8-11 0:00:00' 这个条件把第二区全涵盖了?那这个条件还有啥用.
  [商品编码]='9026'这个条件在第二区有多少数据?
------解决方案-------------------- count(*)可以直接走索引,select 字段有可能通过聚集键再去关联,成本可能比全表扫更高,提供下
'2010-1-1 0:00:00' and '2011-8-11 0:00:00' 有多少数据
[申报日期] between '2010-1-1 0:00:00' and '2011-8-11 0:00:00' and [商品编码]='9026'有多少数据
------解决方案-------------------- SQL code
select id,[收货人名称] ,[申报日期] ,[商品编码] ,[价格] 
FROM dbo.dc_Russia(index [index_hs_date] )
 WHERE  [申报日期] between '2010-1-1 0:00:00' and '2011-8-11 0:00:00' and   [商品编码]='9026'
------解决方案-------------------- ------解决方案--------------------  SQL code
CREATE NONCLUSTERED INDEX [index_hs_date] ON [dbo].[dc_Russia] 
(
    [商品编码] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [Data_Partition_Scheme]([申报日期])
INCLUDE (id,[收货人名称] ,[申报日期] ,[商品编码] ,[价格] )
------解决方案--------------------