带有负载的Oracle SQL或PLSQL扩展

问题描述

假设我有查询(它在多个表上都有联接),并假设它已经过调整和优化。此查询在具有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会对时间产生线性影响。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...