34,576
社区成员
发帖
与我相关
我的任务
分享
create index idx_temp_UserBill_f1 on temp_UserBill(f1)
on wcLeftRangeScheme(BusinessDate)
注意这个语句所创建的索引是分区索引,不是普通的索引,也就是说,这个f1索引也按照分区字段,把整个索引分成了,假设是有5个分区,那么这个索引就被分成了5分,这样设置之后,你再进行分区切换时,这个非聚集索引就不会失效了。
但是这个非聚集索引,有个问题,就是你查询的时候,最好在where 条件中,指定2个查询条件,一个是BusinessDate字段的条件,一个是F1字段的条件,这样的话,sql server首先根据BusinessDate字段,定位某个分区,然后只在这个分区中查找F1,这样速度要快一点。
否则,如果只提供F1字段,那么你有5个分区,他就会去5个分区中,分别查找F1的值,然后来个union all,也就是等价于这样:
select * from 表 where 分区1 and f1 = 'xx'
union all
select * from 表 where 分区2 and f1 = 'xx'
union all
...
下面是普通的索引,也就是只存在一份,一个整体,而不是分成5分:
create index idx_temp_UserBill_f1 on temp_UserBill(f1)