Oracle中,为啥同样的SELECT查询语句,加了CREATE TABLE AS后速度更快了?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中,为啥同样的SELECT查询语句,加了CREATE TABLE AS后速度更快了?相关的知识,希望对你有一定的参考价值。

数据量为100万+,查询用了2、3千秒,加了CREATE TABLE AS却7、8百秒就结束了。

这两个操作不是同一类,select还涉及到结果集缓存返回。回答楼上的,CTAS不会记录日志(或者只会记录非常少量的日志)。不过最好还是通过10046分析下SQL的执行统计信息。 参考技术A 这个其实就是建表语句,和普通的create table一样。有没有归档日志,主要看数据库是归档模式还是非归档。非归档模式下创建的表,默认为nologging模式。
但其他create table可以指定表空间什么的和 no logging不记录日志,这个语句只能是默认的。
默认表空间:SELECT username,default_tablespace FROM user_users;
是否日志:select table_name,logging from dba_tables where table_name='?';追问

普通的SELECT查询也涉及到归档日志吗?

oracle 并行查询为啥只有一个进程在读。 我写了一个查询语句在里面些了个 /*+ parallel .....*/

查看发现只有一个进程在对此查询进行操作。

hint应该写成 /*+ parallel (表名,并行度)*/
例如
select /* + parallel (t, 4)*/ * from t ;
如果还不行,查看
parallel_max_server
说明: 指定一个例程的并行执行服务器或并行恢复进程的最大数量。如果需要, 例程启动时分配的查询服务器的数量将增加到该数量。
如果该参数为1,那么并行也就无效。
参考技术A 如果其他都没有问题的话,我觉得应该是权限设置的问题了,当前用户有查询APPZFBA用户下表或试图的权限吗?

以上是关于Oracle中,为啥同样的SELECT查询语句,加了CREATE TABLE AS后速度更快了?的主要内容,如果未能解决你的问题,请参考以下文章

为啥将 count(*) 添加到 select 语句会强制行存在于子查询中?

[技术分享]20171214_oracle_带rownum的查询语句查询出重复数据:原因是order by没有加主键

Oracle 给表加多个字段

查询oracle数据库时,如何定义变量进行查询

为何这里的语句、查询语句要加引号呢?是不是所有的查询语句都要加引号啊

oracle 并行查询为啥只有一个进程在读。 我写了一个查询语句在里面些了个 /*+ parallel .....*/