在上一轮的实验中,oracle 11g r2版本下,在87县市实验数据的基础上,比较了分表与分区的效率,得出了分区+全局索引效率较高的结论(见上一篇博客)。不过咱们还没有比较过不一样的分区粒度有什么效率差别。这一轮的实验,着重于如下几个目的:算法
实验数据为全国2531个区县,要素总数为46982394。根据不一样的数据组织+索引形式,造成了3个不一样的实验主体:缓存
在1:500、1:2000、1:10000、1:25000、1:50000、1:100000比例尺下,随机从全国范围内选择3个样本范围,做为空间查询时的查询范围。将6*3个样本范围分别与3个实验主体进行空间查询运算,记录每次查询的耗时。oracle
空间查询所用的算法仍然同于上一篇博客《Oracle Spatial分区应用研究之一:分表与分区性能对比》中介绍的、适用于分区的3种算法,即part_query、part_query二、part_query3。同时,本次实验中,还将经过并行框架对3种算法进行衍生,获得另外3种算法,标记为part_query_p、part_query2_p、part_query3_p。框架
所以,对每个实验主体来讲,在每一种比例尺样本下均须要用6种算法来进行查询运算。另外,由于算法执行有前后顺序,后执行的算法因为缓存的缘由,会比先执行的算法有优点。为了尽可能避免这种干扰,会将算法以不一样的执行顺序进行两组实验。性能
第一组实验,其算法执行顺序为:spa
Part_query→Part_query2→Part_query3→Part_query_p→Part_query2_p→Part_query3_p索引
执行结果以下图:博客
说明:表中蓝色区域为按县分区+本地空间索引在不一样比例尺、不一样算法下的查询效率;同理,红色区域表明按县分区+全局空间索引,绿色区域表明按省分区+本地空间索引。黄色斑块表示该行的最小值。效率
根据黄色斑块坐落的位置,可知:基础
第二组实验,其算法执行顺序为:
Part_query_p→Part_query2_p→Part_query3_p→Part_query→Part_query2→Part_query3
执行结果以下图:
根据黄色斑块坐落的位置,可知:
两种实验,分别得出Part_query_p与Part_query算法效率最高的结论。这看似矛盾,实际上正是上文提到的,当算法执行有前后顺序时,会受到缓存的缘由。那么对于Part_query_p与Part_query,谁的效率更高呢?
在两组实验中,Part_query_p与Part_query分别是最早执行的算法。分别从两组实验结果中取出Part_query_p与Part_query的实验数据,就可几乎彻底排除缓存的影响。
两种算法,各命中9次。说明效率至关。但很明显的是,part_query在大比例尺下(大于1:25000)命中率较高;part_query_p在小比例尺下命中率较高。这与咱们的认知一致,即在大任务做业时,并行才会体现优点。
(未完待续)