ORACLE表连接查询结果不一致?
来源:互联网 发布:新西兰基督城公交软件 编辑:程序博客网 时间:2024/05/12 22:18
今天碰到一个奇怪的问题:
使用这个SQL
SQL1:
SELECT * FROM table_a a,table_b b WHERE a.id=b.code AND a.task_id=1001 AND b.spec_id=10302;
查不到记录,但是使用下面的count查询记录数时竟然出现了灵异事件:
SQL2:
SELECT COUNT(*) FROM table_a a,table_b b WHERE a.id=b.AND a.task_id=1 AND b.spec_id=10302;
结果是10000条记录。
此后变换了多种SQL写法,总是一会儿有10000记录,一会儿没记录。
后来看了执行计划,
SQL1的执行计划:
SELECT STATEMENT, GOAL = ALL_ROWS 20122 1 369
TABLE ACCESS BY INDEX ROWID table_b 2 1 68
NESTED LOOPS 20122 1 369
TABLE ACCESS FULL table_a 111 10000 3010000
INDEX RANGE SCAN IDX_table_b_CODE 2 1
SQL2的执行计划:
SELECT STATEMENT, GOAL = ALL_ROWS 15089 1 41
SORT AGGREGATE 1 41
HASH JOIN 15089 1 41
TABLE ACCESS FULL table_a 110 10000 150000
TABLE ACCESS FULL table_b 14929 6587191 171266966
可以看出SQL2对于两个表都是全表扫描,而写法1则走了table_b表的索引。
怀疑是索引不正确,导致走索引的时候,这些记录查不到。
于是单独查询了table_b表,果然实际上是有记录的。
回忆了一下,可能是昨天在测试时强制kill session,导致table_b表数据已经被写入并且未能回滚,但是索引受到破坏。
于是删除索引,再次新建,问题消失。
- ORACLE表连接查询结果不一致?
- oracle 查询表结果
- 导出结果跟查询结果不一致
- HIVE 中内连接(JOIN ON)与LEFT SEMI JOIN查询结果不一致的分析
- HIVE 中内连接(JOIN ON)与LEFT SEMI JOIN查询结果不一致的分析
- 一起ORACLE数据库中数据查询结果不一致问题的排查过程
- 查询结果和数据库记录不一致
- JdbcTemplate 排序查询结果不一致问题
- ORACLE-合并查询结果
- Oracle 查询结果组合
- Linq查询结果集比对应的sql语句查询结果集不一致,存在重复结果
- Oracle多表连接查询
- oracle多表连接查询
- Oracle多表连接查询
- HQL和SQL查询的结果不一致问题!!!
- top 和order by导致查询结果不一致的问题
- not exists 和 not in 查询结果不一致的原因
- Oracle使用子查询,和左连接查询同样结果性能差距。
- 哈哈
- 学历
- 高斯模糊
- NFS 排错
- uCOS-II在51单片机上的移植
- ORACLE表连接查询结果不一致?
- java异常处理
- UDP分包重组算法2
- Android应用开发零碎知识整理
- WINCE加载字体后出现汉字不显示
- 命名空间的使用
- 城里城外看SSDT
- MySQL日志的相關命令與配置方法
- FTP的PASV和PORT连接方式有什么不同