表分区的问题讨论:
1、当表存在大量数据时,即使指定分区查询
select top 10 * from LargeTable where $PARTITION.[PartitionFunction]([SplitDate])=22
速度还是很慢。
2、分区键必须是聚聚索引的一部分,不利于表优化。而且修改分区方案很麻烦。
3、除非在sql中指定分区关键字段值,否则查询效果不佳,而分区关键词又必须是聚集索引的一部分。其实就算没有分区,
只要是聚集索引的字段,进行条件查询,本身就很快。由于这个限制,如果进行多表关联查询,查询条件一旦复杂,查询分区器是
无法内部自动判断仅使用某个表分区,这样很可以造成大表的扫描,速度很慢。就算在sql中指定了表分区,如where $PARTITION.[PartitionFunction]([SplitDate])=22 (22表示内部分区号)
,速度还是很慢,感觉好像内部查询无法定位到改分区。听说在sqlSERVER2008中要改进分区查询的性能。
4、主从表的left join查询,往往查询条件只有主表的日期字段,数据库表分区难以根据20为日期型主表ID,自动判断对应的分区。
居于以上原因:如果是sqlSERVER2005,还是觉得对大表的处理,采用外部月档表的方式存储性能比较好,不依赖数据库的内部分区功能。如果是sqlSERVER2008可以考虑用分区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。