现在有一个大表,按照每日日期进行分区,分区函数指向的列为timestamp
列,然后这个大表还有一个非 unique 的device_id
列,并且以此列建立聚集索引。
当我需要查询某一天的某个device_id
的所有数据时, SQL 如下:
select * from table where 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 ,速度提升非常明显。
所以我想请教一下大家:当以日期为分区边界值时,使用日期函数并不能利用分区函数来限制查询的分区?换句话说,是不是日期函数对于表分区是无效的?有没有什么方法能在按日期分表的情况下同时利用日期函数?
感谢大家解答。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.