为什么用户 运行 两个或多个 select 不能同时查询同一个 table?

Why cannot a user run two or more select queries concurrently on same table?

在使用 Oracle 数据库练习 DBMS 和 SQL 时,当我尝试在 table 上触发 2 个 select 查询时,数据库总是等待第一个查询完成执行并保持另一个显然正在筹备中。

考虑一个 table MY_TABLE 有 100 万条记录,其中一个列 '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

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

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

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

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

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