oracle 索引 速度,oracle 索引提升查詢速度, in 和 exist 效率

做記錄:

今天有一個有153萬條數據的表,發現查詢很慢:

select count(y) astransfereeNum,xfromt_ast_subject_invest_orderwhere x= '111' and ORDER_STATUS!=1

GROUP BY x;

執行時間大概2-3s 。。

給字段x 加上索引后,時間為0.007s . 查詢速度明顯提升。

2. 關於in 和 exist 效率問題

#外表內表同量級

select o.*

fromx oWHERE o.ORDER_STATUS!=1 and o.trans_from_order IN (select t1.ORDER_NO fromx t1 )

61.123sselect o.*

fromx oWHERE o.ORDER_STATUS!=1 andEXISTS (select 1 from x t1 where t1.ORDER_NO=o.trans_from_order)

65.162s

本人實測 x表數據量是 153萬條, 使用in 和 exists 查詢 , 耗時差不多,甚至in 還快一點。所以網上說的 in 比 exists 快。。顯然是沒有測試考慮。就算加上索引,時間也是差不多的。

網上查到如下說法:

1. EXISTS與IN的使用效率的問題,通常情況下采用exists要比in效率高,因為IN不走索引,但要看實際情況具體使用:

2.IN適合於外表大而內表小的情況;EXISTS適合於外表小而內表大的情況。

# 外表小(2000) 內表大(150萬)

select o.*

fromloan.x oWHERE EXISTS (select 1 from loan.y t1 where t1.TRANS_FROM_ORDER=o.project_no); #1sselect o.*

fromloan.x oWHERE project_no in (select TRANS_FROM_ORDER from loan.y t1 ); # 1s

# 外表大(150萬) 內表小(2000)

select t1.*

fromloan.y t1WHERE EXISTS (select 1 from loan.x o where t1.TRANS_FROM_ORDER=o.project_no);

執行計划

de05ed9b91a8f9eca255d3c0aac9787e.png

select t1.*

fromloan.y t1WHERE TRANS_FROM_ORDER in (select project_no from loan.x);

3d86825995565b205f4df89895f240de.png

使用navicat oracle 測試 發現並沒有較大區別,不管外大內小,還是外小外大。 郁悶。。但是可以肯定的是加上索引,in 和 exist 的影響可以忽略。

總結:

測試下來in 和 exists 好像差別不大。。和網上描述的並不一致,可能是我的工具問題,我使用的navicat premium ,可能有查詢緩存。 而且我使用該工具的 Explain selected 或者 oracle的 explain plan for 命令 ,

發現in 和  exists 的執行計划是一樣的(看上圖)。 真不知道該信誰的了。

ScanNet数据集下载全攻略:从申请到解析的保姆级教程(含常见问题解决) 本文提供了ScanNet数据集从申请授权到下载、解析的完整实战指南。针对这个大规模室内RGB-D数据集,详细介绍了官方申请流程、优化下载策略、数据验证方法,并重点解决了深度图解析等常见问题,帮助三维视觉研究者高效获取使用这一宝贵资源。 阅读详情

相关推荐

DRM驱动架构浅析-上(DRM基础概要与U-Boot阶段驱动解析)

本文主要探讨了Rockchip平台的DRM显示驱动架构及其在U-Boot阶段的实现。

一路寒风身如絮,命海沉浮客独行 1719

oracle数据添100条数据测试有索引没有索引查询速度

在这里插入代码片 create table test_p_2( log number(10) primary key, name varchar2(20), psaaword varchar2(20) ); 创建序列 create sequence seq_log; 测试插入sql语句 insert into test_p_2 values(seq_log.nextval,'kikiwen','123456'); 插入100万条数据 --随机向一张表插入 1百

shijinjins的博客 777

【精细解读】xapp585(通道LVDS接口ADC)

xapp585的参考设计有VerilogVHDL两种源码。

FPGA艺术家的博客 480

使用MyBatis in查询(单次查询)for循环查询(查询) 的效率问题

中嵌套子查询语句的情况,确实有这么一回事,但本文不做讨论,因为实际的开发中"关联表查询影响效率的问题"是可以在设计上避免的,而且也应该在设计上避免。语句中不包含子查询,而是确切的一些值。在这种情况下,要分析的效率问题是:网络传输。查询效率低” 这种说法,就认为所有的in查询效率都低,一旦使用到。很人都会思考这两者的效率问题,但可能没什么头绪。那么就只对上述代码例子中的情况进行分析,实际上这种说法说的是。首先大家应该是看到:“

无数_Mirage的博客 1万+

in会不会走索引

参考来源:https://www.cnblogs.com/bulushengse/p/12703789.html 结论:IN肯定会走索引,但是当IN的取值范围较大时会导致索引失效,走全表扫描 当我们执行sql:explain select * from student where sid in(1) 得到执行计划,可以看到字段type:const type: all:没有使用索引,全表扫描 index:全部扫描,但是使用了索引,扫描方式是按照索引的顺序 range:有范围的索引扫描,相对于in

服务端开发进阶之路 6834

创建索引oracle 很慢,Oracle 11G – 插入时索引的性能影响

目的验证插入没有PK /索引的记录上后来创建的记录是否真的比插入PK /索引.注意这里的要点不是索引需要更时间(很明显),但总成本(不带索引的插入创建索引)高于(使用索引插入).因为我被教导插入没有索引并且稍后创建索引因为它应该更.环境DELL Latitude核心i7 2.8GHz 8G内存Windows上的Windows 7 64位SSD硬盘Oracle 11G R2 64位背景我...

weixin_35698659的博客 1220

oracle分区表、索引、绑定变量等速度测试

数据库实验一.实验环境1.    系统:win7 64位(虚拟机)2.    处理器:Inter(R)Core(TM)i5-6267U CPU@2.90GHZ3.    内存:4G4.    数据库:oracle 12c5.    运行SQL环境:navicat sql plus二.实验数据1.      数据来源:tpc-h数据集2.      数据详情:一共有8张表分别是(数据量从小到大):...

qq_33604177的博客 768

oracle 索引提升查询速度, in exist 效率

做记录: 今天有一个有153万条数据的表,发现查询很慢: select count(y) as transfereeNum,x from t_ast_subject_invest_order where x= '111' and ORDER_STATUS!=1 GROUP BY x; 执行时间大概2-3s 。。 给字段x 索引后,时间为0.007s . 查询速度明显提升。 2. 关...

yuanfangderen 284

关于oracle中的in exist

有时候会将一列一系列值相比较。最简单的办法就是在where子句中使用子查询,在where子句中可以使用两种格式的子查询 1、 使用in操作符 2、 使用exist操作符 第一种格式比较容易编写,第二种格式要比第一种格式执行效率高。在oracle中几乎可以将所有的in操作符子查询改写为使用exist的子查询 Inexist的区别: 运用exist子句不管子查询从表中抽取什么数据它只查看

1968

oracle查询引用外表_Oracle sql 如何 更 查询

1、SELECT子句中避免使用 " * ":ORACLE在解析的过程中, 会将"*" 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更的时间。2、sql语句用大写的:因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行。3、WHERE子句中的连接顺序:ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件...

weixin_35786770的博客 190

oracle or使用速度马_Oracle sql 如何 更 查询

1、SELECT子句中避免使用 " * ":ORACLE在解析的过程中, 会将"*" 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更的时间。2、sql语句用大写的:因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行。3、WHERE子句中的连接顺序:ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件...

weixin_39846186的博客 230

oracle10查询条件执行顺序,SQL优化之针对count、表的连接顺序、条件顺序、inexist的优化...

本文详述了SQL优化中针对count、表的连接顺序、条件顺序、inexist的优化,非常具有实用价值!详述如下:一、关于count看过一些网上关于count(*)count(列)的文章,count(列)的效率一定比count(*)高吗?其实个人觉得count(*)count(列)根本就没有可比性,count(*)统计的是表里面的总条数,而count(列)统计的是当列的非空记录条数。不过我们可...

weixin_42521558的博客 304

oracle中<>执行效率,Oracle的sql执行效率优化

1. WHERE子句中的连接顺序ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。如:Select …From operation_detail t, cargo_request rWhere t.request_sysid = r.request_sysidAnd...

weixin_35647799的博客 756

SQL优化之count,表的连接顺序、条件顺序,inexist

关于SQL中一些优化的误区解释。

wen_demon的专栏 1850

oracle查询执行顺序,Oracle 查询执行顺序

5.WHERE子句中的连接顺序Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。6.SELECT子句中避免使用 ' * '当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 '*' 是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解...

weixin_29442195的博客 833

oracle中行转列并排序与oracle查询优化

oracle中行转列并排序与oracle查询优化

mhyml的博客 531

ORACLE中NOT IN 的替代

典型的查询方式为:SELECT TITLEFROM BOOKSHELFWHERE TITLE NOT IN      (SELECT TITLE FROM BOOKSHELF_CHECKOUT)ORDER BY TITLE;如果BOOKSHELF_CHECKOUT很大的话,速度可能会很慢,因为ORACLE会在BOOKSHELF_CHECKOUT上执行一个时间密集型的全表扫描。 oracle...

liufengking的专栏 195

oracle sql 建议,Oracle提高sql执行效率的心得建议

Oracle提高sql执行效率的心得建议复制代码 代码如下:-->FROM子句中包含个表的情况下,选择记录条数最少的表作为基础表-->解析WHERE子句是自下而上的 过滤条件要有顺序-->ORACLE会将'*'转换成列名-->DELETE会在rollback segment中存放可恢复信息,可以试试TRUNCATE-->COMMIT会释放:1.rollback se...

weixin_29281915的博客 326

ORACLE 关键字EXISTSIN的区别以及优缺点

2、EXISTS 使用过程,首先遍历A表数据,将每一条数据B表查询出的数据进行筛选,这样查询的数量只取决于A表,遍历的数量也会少,使用于B表比较大的情况。1、IN 使用过程,首先将B表进行遍历,将B表查询的数据进行缓存,然后将A表的数据与B表对应的数据检索出来,适用于B表查询的数量比较少的情况。2、使用UNION ALL 叠查询,更的返回数据,优点:不会使索引失效。1、使用exists,优点:子查询的数据可以更早的中断查询,返回结果。3、优化子查询,子查询速度,会直接导致主表查询到的速度

weixin_41665588的博客 554

Oracle的SQL优化建议

第一、SQL语句尽量用大写的 因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行 第二、使用表的别名 当在SQL语句中连接个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。 第三、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效) ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表也称为驱表,driving table)将被最先处理,在FROM子

龙吟山庄 1586

sql oracle 性能,Oracle Sql 性能优化

Oracle Sql 性能优化1)不知大家是否喜欢使用‘NOT IN’这样的操作,如果是,那尽量使用(NOT) EXISTS 替代2)在海量查询时尽量少用格式转换。3)查询海量数据是,可以使用optimizer['ɔptimaizə]hints,例如/*+ORDERED */尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。不用NOT IN操作符,可以用NOT EXISTS或者...

weixin_35733151的博客 167

sql优化之oracle数据库

oracle数据库sql优化 文章目录oracle数据库sql优化 oracle执行顺序是自右向左的,区别于mysql(自左向右) 1、选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含个表的情况下,你必须选择记录条数最少的表作为基础表,即基础表在from最右边。 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是

zhengguofeng0328的博客 445

SqlLite 授权破解文件

sqlLite数据库编辑工具,如果需要长期需要授权文件,该下载包提供了破解的授权文件。下载下来只要将文件:license3.key文件放在你的安装目录,并引用该文件即可,引用后,它会提醒你已经注册成功,可以正常使用。

ISO IEC 29134-2023 信息技术安全技术隐私影响评估指南.pdf

ISO IEC 29134-2023 信息技术安全技术隐私影响评估指南.pdf

上一篇: oracle10g exp无法导出,exp和expdp导入导出 Oracle10g学习系列(8)
下一篇: packetbeat扩展oracle,packetbeat 无法启动
华清阙
博客等级 码龄10年 18粉丝 286原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值