ORACLE中一条查询SQL,到底是怎执行的

1.client发出一条sql的时候我们为相应的产生一个内存进程叫server process
2.server process的第一个经过pga,之后到达sga的shared pool,
3.先进行表和权限的检查,如果满足就查找执行计划,如果执行计划存在叫软解析,
4.不存在的话产生多种计划选一个最优的计划叫硬解析
5.之后去buffer cache读取数据。如果有数据。发生逻辑读
6.如果没有数据就去dbf读取,发生物理读。
7.最后,如果这个语句中有排序,在返回给用户的时候会在pga内排序之后在给用户(若是,表较大,先把数据放到临时表空间,一部分一部分的读取到pga排序,之后给用户)

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用Oracle数据库的并发执行来同时执行两个不同的查询SQL。这可以通过使用并行查询或多线程来实现。 1. 并行查询:在查询语句使用并行提示来指示Oracle并行执行查询。例如: ```sql SELECT /*+ parallel(emp, 4) */ * FROM emp; SELECT /*+ parallel(dept, 2) */ * FROM dept; ``` 上面的示例,第一个查询将在4个并行执行的进程执行,第二个查询将在2个并行执行的进程执行。 2. 多线程:您可以使用Oracle多线程功能来同时执行多个查询。在Oracle 12c及更高版本,可以使用`DBMS_PARALLEL_EXECUTE`包来实现。以下是一个示例: ```sql DECLARE l_task_name VARCHAR2(30); BEGIN -- 创建任务 l_task_name := DBMS_PARALLEL_EXECUTE.CREATE_TASK('my_task'); -- 添加并行执行SQL语句 DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL(l_task_name, 'SELECT * FROM emp', by_rowid=>TRUE); DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL(l_task_name, 'SELECT * FROM dept', by_rowid=>TRUE); -- 并行执行任务 DBMS_PARALLEL_EXECUTE.RUN_TASK(l_task_name); END; / ``` 上面的示例,创建了一个名为`my_task`的任务,并将两个查询语句添加到任务。然后,通过调用`RUN_TASK`来并行执行任务。 请注意,以上示例仅为演示目的,并且可能需要根据您的具体情况进行适当的修改和调整。同时,并行执行查询可能会对系统资源产生较大的负载,因此请确保在适当的环境进行测试和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1757200494

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值