问题描述
假设我有查询(它在多个表上都有联接),并假设它已经过调整和优化。此查询在具有N个记录的目标数据库/表上运行,查询结果为R个记录,并花费时间T。现在,负载逐渐增加,并说目标记录变为N2,得到的结果为R2,花费的时间为T2。假设我已经为Oracle分配了足够的内存,那么L2 / L1将接近T2 / T1。意味着负载的成比例增加将导致执行时间成比例增加。对于这个问题,可以说L2 = 5L1,这意味着负载已增加到5倍。那么此查询完成的时间也将是5倍或更多,对吧?因此,为了减少时间的成比例增长,我们在Oracle中是否有其他选项,例如并行提示等?在Java中,我们将作业拆分为多个线程,将负载分为2倍,而工作线程则为2倍,因此几乎可以同时完成。因此,随着负载的增加,我们增加了工作线程并合理地解决了扩展问题。 Oracle可能会发生这种情况吗?还是Oracle会在后端处理这种情况并通过内部将负载分为并行处理来进行扩展?在这里,我有多核处理器。我将进行试验,但是如果有专家意见可以帮助您。
解决方法
不。查询算法不一定线性增长。
您可能应该了解有关算法和复杂性的知识。但是,数据中使用的许多算法都是超线性的。例如,对一组行进行排序的复杂度为O(n log n),这意味着如果将数据大小加倍,则对进行排序所花费的时间将大于两倍。。
对于索引查找和各种联接算法也是如此。
另一方面,如果查询使用b树索引查找几行,则复数为O(log n)-这是次线性的。因此索引查找的增长速度比数据大小的增长速度慢。
因此,通常您不能假设将数据大小增加n
会对时间产生线性影响。