1

在使用 Oracle 数据库练习 DBMS 和 SQL 时,当我尝试在表上触发 2 个选择查询时,数据库总是等待第一个查询完成执行,并且显然将另一个查询保留在管道中。

考虑一个具有 100 万条记录的表 MY_TABLE,其中的“id”列包含记录的序列号。

现在我的查询是:-

查询 #1 -select * from MY_TABLE where id<500001; --I am fetching first 500,000 records here

查询 #2 -select * from MY_TABLE where id>500000; --I am fetching next 500,000 records here

由于这些是选择查询,因此它们必须在作为共享锁的表上获取读锁。那么为什么会出现这种现象呢?请注意,据我所知,这两个查询的示例空间或域是互斥的,因为我通过 where 子句应用了过滤器,这进一步加剧了我的困惑。

此外,我以这种形式将其可视化,必须有一些进程正在评估我的查询,然后与内存(即资源)握手以获取结果。因此,所有持有该锁的进程都应该可以访问共享锁模式下的任何资源。

其次,是否有任何方法可以覆盖此行为或同时执行多个选择查询。

注意:- 我想将特定任务(即表的数据)分块并提高脚本的速度。

4

1 回答 1

5

数据库不会将查询保存在管道中,这只是您的客户端一次只发送一个查询的事实。数据库将非常高兴地同时针对相同的数据运行多个查询,例如来自不同的会话。

于 2019-09-06T07:05:03.593 回答