发布网友 发布时间:2022-04-23 06:33
共4个回答
热心网友 时间:2022-05-03 12:05
导至性能慢的主要原因是:你这个查询是无条件查询,即无WHERE条件。并且使用了ORDER BY DESC 如果在 gmt_create 上存在索引,ORACLE可能也会忽视而采取全表扫描。ORACLE把读取的全表数据放在内存(如果SORT_AREA_SIZE足够大),否则将放到临时表空间。然后对读取得到的数据进行排序。排序其实不是很慢(现在硬件的性能很好,排序很快),导至慢的主要原因是全表扫描。 如果在 gmt_create 列上存在索引的话,可以使用提示/*+ index_desc(veryBigTable ,索引名)*/,引导OACLE按照索引降序进行扫描,可以在顺间得到结果,速度非常快。如果没有索引的话,只能采取全表扫描,此时加快速度得到结果的唯一方法就是采用并行。追问请问" 如果在 gmt_create 上存在索引,ORACLE可能也会忽视而采取全表扫描"。这个是为什么啊?
热心网友 时间:2022-05-03 13:23
order by 在sort area中进行 大数据量排序可能会超过排序区分配内存,而使用系统内存 导致数据库性能下降以致瘫痪。
热心网友 时间:2022-05-03 14:58
因为数据量确实太庞大了,我以前也用过Oracle,直接把系统都拖慢了
热心网友 时间:2022-05-03 16:49
主要是后面的 order by 排序语句。
它是这样的:先查询出来结果,然后再按照结果进行排序,而不是按照顺序进行查询。而且,所有这些操作全在数据库中完成。
现在有点概念了吗?
我在线,不懂可以再问