sql - 为什么用户不能在同一个表上同时运行两个或多个选择查询?

标签 sql oracle acid ansi-sql database-management

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

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

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

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

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

最佳答案

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

关于sql - 为什么用户不能在同一个表上同时运行两个或多个选择查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57816695/

相关文章:

mysql - SELECT 列表不在 GROUP BY 子句中并且包含非聚合列

sql - 使用 insert 和 value 以及子查询插入行

sql - 引用游标类型 oracle

mongodb - 文档DB和模拟ACID

cassandra - Cassandra如何处理并发更新?

php - 是否可以编写一个输出 JSON 的 SQL 函数?

SQL SELECT 用于一对多特征关系以选择具有某些特征的键

sql - Oracle SQL - 选择具有最高级别的行

SQL查询内部连接表中的不同记录

java - HBase:原子 'check row does not exist and create' 操作