请教大家一个 SQL Server 表分区的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zrp1994
V2EX    数据库

请教大家一个 SQL Server 表分区的问题

  •  
  •   zrp1994 2017-03-10 10:02:08 +08:00 971 次点击
    这是一个创建于 3157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有一个大表,按照每日日期进行分区,分区函数指向的列为timestamp列,然后这个大表还有一个非 unique 的device_id列,并且以此列建立聚集索引。

    当我需要查询某一天的某个device_id的所有数据时, SQL 如下:

    select * from table here device_id = 233 and datediff(day, timestamp, '2017-03-10') = 0 

    我发现查询的效率和分区之前比并没有较大的提升(耗时为原来的 50%),和预期有很大出入。

    然后使用另一种日期限制条件:

    select * from table where device_id = 233 and timestamp >= '2017-03-10' and timestamp < '2017-03-11' 

    查询的耗时为之前的 1/300~1/200 ,速度提升非常明显。

    所以我想请教一下大家:当以日期为分区边界值时,使用日期函数并不能利用分区函数来限制查询的分区?换句话说,是不是日期函数对于表分区是无效的?有没有什么方法能在按日期分表的情况下同时利用日期函数?

    感谢大家解答。

    7 条回复    2017-05-05 14:47:26 +08:00
    weizhiyao008
        1
    weizhiyao008  
       2017-03-10 10:07:17 +08:00   1
    where 条件里面不要含有计算
    Alias4ck
        3
    Alias4ck  
       2017-05-04 17:37:51 +08:00
    你都说大表了。。把 where 条件修改一下 啊。。对所有的 timestamp 进行 datediff 肯定会慢啊(全表查询了)。。换成 timestamp=datediff(day, 0, '2017-03-10') 就好了
    zrp1994
        4
    zrp1994  
    OP
       2017-05-04 18:25:30 +08:00
    @Alias4ck #3 timestamp 包含时分秒的,你这个方法不行
    Alias4ck
        5
    Alias4ck  
       2017-05-05 13:51:13 +08:00
    @zrp1994 那就把 timestamp 转换为日期格式啊。而且你上面给出的也只是日期比对啊 。。。我在怀疑 timestamp 和没有时间戳的日期比对怎么减的。。。是按照 00 时 00 分 00 秒为标准吗?(原谅我没怎么用过 sqlserver,不太明白其中的语法)。。
    Alias4ck
        6
    Alias4ck  
       2017-05-05 14:27:07 +08:00
    测试了下 用 getdate()语法获取的是当前日期包含时分秒,也是可以用上述给的 datediff 的语法的 应该是默认打上了 00 时 00 分 00 秒。所以这个是可行的
    Alias4ck
        7
    Alias4ck  
       2017-05-05 14:47:26 +08:00   1
    刚才上面那个是验证我自己的想法。。不好意思了 尴尬。。。的确你说的我写的 timestamp=datediff(day, 0, '2017-03-10')是不行的。。。可以改写成 convert(varchar(10),timestamp,120)='2017-03-10'...这种方式应该是可行的吧。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2529 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 15:04 PVG 23:04 LAX 08:04 JFK 11:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86