SQL优化之不走索引_加hint也不走索引

迪文DGUSII串口屏中文显示实战:手把手教你制作16x16点阵字库 本文提供了一份迪文DGUSII串口屏16x16点阵中文字库制作的完整实战指南。从显示原理、字体选择与参数设置,到使用FontLib Make工具生成字库文件,再到部署、调用及存储空间优化,手把手教你解决中文显示难题,确保界面文字既美观又稳定。 阅读详情

案例1:隐式类型转换


SQL> create table t(id varchar2(10));
表已创建。

SQL> insert into t select empno from scott.emp;
已创建14行。

SQL> commit;
提交完成。

SQL> select * from t;

ID
----------
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

已选择14行。


SQL> desc t;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 VARCHAR2(10)


SQL> create index t_idx on t(id);
索引已创建。

SQL> analyze table t compute statistics;
表已分析。

SQL> set autot trace
SQL> set timing on

SQL> select * from t where id=7369;

已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 1601196873

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     4 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T    |     1 |     4 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_NUMBER("ID")=7369)

统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        408  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


数据类型隐式转换,导致未走索引


SQL> select /*+ index(t) */ * from t where id=7369;

已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 1601196873

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     4 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T    |     1 |     4 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_NUMBER("ID")=7369)

统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        408  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


即使加了hint,依然无效


SQL> select * from t where id='7369';

已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 2946670127

--------------------------------------------------------------------------
| Id  | Operation        | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT |       |     1 |     4 |     1   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| T_IDX |     1 |     4 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("ID"='7369')

统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        408  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


解决方案:1、避免隐式转换 2、创建函数索引



案例2:索引失效


SQL> select a.index_name,a.table_owner,a.table_name from user_indexes a where status = 'UNUSABLE';

SQL> alter index index_name rebuild online compute statistics;

索引已更改。



案例3:索引的访问路径oracle并没有考虑


主要讨论index fast full scan

index fast full scan类似全表扫描,只是把索引当作表来处理,支持并行和多块读
index fast full scan的前提是,索引必须满足这个查询,同时必须保证非空
(通过非空字段或者是在where条件中声明非空),最为典型的就是count(*)


SQL> create table test as select * from dba_objects;
表已创建。

SQL> create index i_test_1 on test(object_id);
索引已创建。


SQL> analyze table test compute statistics;
表已分析。

SQL> set autot trace
SQL> select count(*) from test;

执行计划
----------------------------------------------------------
Plan hash value: 1950795681

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   206   (1)| 00:00:03 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TEST | 52933 |   206   (1)| 00:00:03 |
-------------------------------------------------------------------

统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        730  consistent gets
          0  physical reads
          0  redo size
        414  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


这里虽有索引,但oracle并不知道索引中是否有null值,所以无法走索引


SQL> select count(*) from test where object_id is not null;

执行计划
----------------------------------------------------------
Plan hash value: 1366347385

----------------------------------------------------------------------------------

| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------------------------

|   0 | SELECT STATEMENT      |          |     1 |     4 |    34   (3)| 00:00:01 |

|   1 |  SORT AGGREGATE       |          |     1 |     4 |            | |

|*  2 |   INDEX FAST FULL SCAN| I_TEST_1 | 52933 |   206K|    34   (3)| 00:00:01 |

----------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("OBJECT_ID" IS NOT NULL)


统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        124  consistent gets
          0  physical reads
          0  redo size
        414  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


select count(distinct object_id) from test;
select count(*) from (select object_id from test group by object_id);
这是itpub上的一个例子,严格来说这2个语句并不是等价的,第一个语句会忽略null,因此只要object_id上有索引
,同时索引比表小的情况就会用索引扫描代替全表扫描,而第二个语句则不会.
第一个语句和select count(*) from (select object_id from test where object_id is not null group by object_id);
是等价的.



海思图像质量之HiPQTool调试 文章目录一. HiPQTool 界面二. 图像调试三. 将调试参数写入程序中 一. HiPQTool 界面 二. 图像调试 三. 将调试参数写入程序中 阅读详情

相关推荐

Grok 3国内怎么用?超详细使用指南+实用指令模板

主要是用于快速分析学术论文,提取关键信息,总结研究成果。Analyze the following research paper: [粘贴或上传论文内容]1. Extract key findings, methodologies, and conclusions. (提取主要发现、方法和结论。2. Identify statistical significance and data points. (识别统计显著性和数据点。

Survivor_sl的博客 1万+

SQL无法走索引的情况及解决思路

上次丁俊大师在社群上做了CBO优化器和坑爹案例的分享后,反响不是一般的强烈,但其中也有一部分同学表示太高大上了(我也是这样觉得的),消化起来相当有难度,于是便有了本文。绕开复杂的CBO优化器不说,本文将帮你理清那些因为SQL语句编写规范问题导致没有充分利用索引来大幅提升效率的使用场景。一、SQL无法走索引的情况及解决思路因为数据库优化器不够智能,或者一些逻辑原因,导致SQL在比较适合走索引的情况下...

u014389734的博客 4764

PyCharm配置及使用Git教程

平时习惯在Windows下开发,但是我们又需要实时将远方仓库的代码clone到本地,也需要将自己修改的代码push到远端服务器。

酒酿小圆子呀~ 4万+

Oracle不走索引hint,加hints不走索引(位图索引)

各位大神从测试平台迁移到正式平台,处理一个存储过程变得异常缓慢,最终锁定是一个语句执行特别慢DELETE FROM BILL_DETAIL_TMP T WHERE T.BILL_PLAT = :B3 AND T.BILL_TYPE = :B2 AND T.MIN_HCODE = :B1对比执行计划,发现正式平台需要执行全表扫描,而测试上就直接通过位图索引IDX1就可以了发现测试平台和正式平台表结构...

weixin_35460589的博客 773

极验滑块验证码破解与研究(一):AST还原混淆JS

极验滑块验证码破解与研究(一):AST还原混淆JS声明一、环境安装1. node安装1.1. node下载1.2. 配置环境变量1.3. node安装检测1.4. pycharm配置node环境2. babel库安装2.1. babel库安装命令2.2. babel库安装检测二、AST还原混淆JS1. 模块导入2. AST还原流程3. 复制还原需要用到的js源码4. AST还原函数详解4.1. replace_unicode4.2. replace_unicode, replace_name_array,

帯泪的鱼的博客 1万+

ESP32固定翼航模硬件设计与飞行力学解析

固定翼无人机是嵌入式控制与空气动力学交叉实践的经典载体,其飞行稳定性本质源于重心、气动中心与控制面的物理耦合关系。理解静稳定度(Static Margin)、升力系数调控、偏航力矩生成等基础原理,是实现可靠姿态控制的前提。在低成本工程约束下,材料刚度、结构弹性与电机-驱动协同设计共同决定了系统动态响应边界。ESP32平台凭借高精度PWM、低功耗双模无线及丰富GPIO,成为教学级航模开发的理想主控;而魔术贴基板、可调电池配重、柔性尾翼等创新结构,则将抽象的飞行力学概念转化为可测量、可调试的实体对象,广泛应用于

weixin_29859471的博客 365

Oracle不走索引hint,oracle不走hint原因1:依据hint会出现错误结果

比如根据索引取count(*),如果该列没有规定是非null的,那么根据索引取行数就会出现错误结果。如下:1 创建一张包含null的表test,并在上面创建索引SQL> create table test (a varchar2(10));Table created.SQL> insert into test values ('a');1 row created.SQL> i...

weixin_35515918的博客 1135

ultralytics.data.utils——utils.py子模块代码详读

ultralytics.data.utils——utils.py子模块代码详读

Together_CZ的博客 1721

【HINT】使用“NO_INDEX ”Hint提示避免SQL使用特定索引

在生产环境的SQL调优测试过程中经常遇到如下场景:一张表上创建了非常多的索引(不推荐),每一个索引都是针对特定业务查询而增加的。这极易导致SQL由于个别索引的引入出现性能问题,在这种情况下不能简简单单的将索引删除在...

cuanchuwei1207的博客 2540

Android车载蓝牙开发全攻略:从基础到高级优化

本文系统介绍了Android车载蓝牙开发的核心技术与实践指南。文章首先阐述了蓝牙在智能汽车中的关键作用,包括免提通话、音频流媒体等应用场景。随后详细解析了蓝牙协议基础,重点介绍了HFP、A2DP等车载常用协议。开发实战部分提供了设备发现、连接、数据传输的完整代码示例,并融入多线程和内存优化技巧。通过真实车载案例,展示了启动时间、流畅度和资源使用的优化策略。最后针对面试需求,提供了专业的技术问答,涵盖蓝牙开发全流程。全文紧密结合Android车载开发职位要求,为开发者提供了一套完整的蓝牙技术解决方案。

郑伟强dev的专栏 119

【Bug已解决】NCCL timeout for validation 解决方案

训练用多卡 DDP / FSDP 正常,但一到或者进程直接 hang 在 eval 的某个集合通信上。最迷惑的是:训练阶段(有集合通信)完全正常,偏偏 eval 阶段(看起来更轻量)超时。因为 eval 阶段某些 rank 没参与 collective,导致参与的那部分 rank 永远等不到同伴。

一键难忘的博客 142

Oracle不走索引hint,为什么用了hint还是不走index

看了支付宝面试:select min(id),max(id) 优化问题的帖子,做实验发现奇怪现象,如下:SQL>select * from v$version where rownum<2;BANNER--------------------------------------------------------------------------------Oracle Data...

weixin_42546508的博客 496

LDRA Testbed软件静态分析_操作指南

从本文起,将开始LDRA Testbed(TBrun)教程的系列文章,包括软件静态分析、单元测试、集成测试,以及基于Testbed的自动化工具开发、持续集成、常见问题解答等。LDRA公司是专业的软件测试工具与测试技术、咨询服务提供者,其总部位于英国利物浦。其旗舰产品Testbed/TBrun功能全面、易于使用,不仅适合于主机平台软件测试,同时适合于嵌入式软件测试。不仅能进行软件静态测试,还能进行软件单元测试、软件集成测试,在白盒测试领域运用比较广泛。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1万+

KingbaseES数据库SQL优化手段全解析:从索引到并行查询的实战指南

在数据库应用中,SQL语句的性能直接决定了系统的响应速度和吞吐量。KingbaseES作为一款高度兼容Oracle的企业级数据库,提供了丰富的SQL优化手段。下面我们就从索引优化、HINT使用、参数调整、并行查询等核心维度,带您掌握实战化的SQL优化技巧,附代码示例和操作建议。

鸽芷咕的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【openGauss】openGauss的SQL优化-添加索引,强制走hint、修改SQL写法(INNER JOIN SELECT DISTINCT改EXISTS)

本文介绍了openGauss数据库SQL优化的两种方法:1) 添加索引并强制走hint,通过创建索引并使用/*+ indexscan */提示强制查询使用索引;2) 改写SQL语句,将INNER JOIN SELECT DISTINCT改为EXISTS写法,避免不必要的全表扫描。两种方法都能显著提升查询性能,第一种适用于索引未自动生效的情况,第二种适用于连接查询中仅需判断记录存在性的场景。文章通过具体SQL示例展示了优化前后的代码对比。

tttzzzqqq2018的博客 569

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

oracle为何不走索引,sql优化为何不走索引

本帖最后由 flzhang 于 2018-3-19 20:06 编辑这个sql如果用hint强制走索引本来可以很快,如果不用hint时,优化器就是不走索引一定要用全表扫描,不用hint时,为什么优化器认为全表扫描的cost会最少呢?请大家帮忙看看不加hint时的SQL 是这样的SELECTT2.SERL_NO,T1.SI_YMD,T1.ST_YMD,T1.ST2_YMD,T1.SO_YMD,T...

weixin_39866881的博客 174

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大sql如果不能加索引,还能怎么优化 —— hint学习

慢sql、大sql,不能加索引,还能怎么优化,hint学习

ckh_user的博客 911

达梦sql执行计划、HINT、索引简单应用

因为不需要用户创建,因此称为虚索引。6)Hint中指定具体对象时(比如指定表名或者索引名),不能带上该对象所在SCHEMA的名称,即使该SQL文本中已经有对应的SCHEMA名称。(GATHER_TABLE_STATS、GATHER_INDEX_STATS 或 GATHER_SCHEMA_STATS)

BShu666的博客 5645

sql不走索引总结(多看多记住啊)

Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是 由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。 相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First

YZWDNN的博客 1万+

达梦数据库在不修改SQL的情况下为SQL指定HINT

达梦数据库在不修改SQL的情况下为SQL指定HINT

Mrkill123的博客 1526

使用hint优化 Oracle SQL语句方法30例

 使用HINTHINT是一种SQL优化的重要手段。在缺省情况下,SQL的执行计划和优化方案是数据库的优化器自动完成的,不需要编程人员进行干预。但是数据库优化器的优化方案和执行计划不总是最优的。ORACLE数据库提供了开发人员强制性制定优化方案的方法来弥补数据库优化器在这方面的不足。这种方法就是使用HINT。HINT的使用方法是在SQL语句中插入/*+ 规则> */ 这样的提示,这些提示

上海夜未眠 3156

oracle 强制索引 hint,oracle常用hint详解

相对而言ORACLE优化器已经非常智能,产生的执行计划也是最优的,但是ORACLE还是提供了一些hint供用户显示的控制执行计划,因为大千世界各种各样的业务都有,ORACLE优化器生成的执行计划并不一定适用于所有业务,同时hint对于DBA而言更是一件利器,我们可以通过hint看到优化后的执行计划,总结一下常用hint。1.全表扫描hintfull(table_name)相对而言,全表扫描hint...

weixin_27713587的博客 4425

SQL 优化之该走索引却不走索引的分析(二)

<br />SQL优化器简介 <br />基于规则的优化器 <br />。总是使用索引 <br />。总是从驱动表开始(from子句最右边的表) <br />。只有在不可避免的情况下,才使用全表扫描 <br />。任何索引都可以 <br />基于成本的优化器 <br />。需要表、索引的统计资料 <br />Analyze table customer compute statistics; <br />Analyze table customer estimate statistics sample 50

无双小宝 1404

mysql hint语句_Oracle 通过sql profile为sql语句加hint

sql profile最大的优点是在不修改sql语句和会话执行环境的情况下去优化sql的执行效率,适合无法在应用程序中修改sql时.sql profile最大的优点是在不修改sql语句和会话执行环境的情况下去优化sql的执行效率,适合无法在应用程序中修改sql时.sql profile最常用方法大概是:--创建产生sql tuning advisor任务DECLAREtuning_task var...

weixin_42498989的博客 541

oracle sql加hint,Oracle 通过sql profile为sql语句加hint

sql profile最大的优点是在不修改sql语句和会话执行环境的情况下去优化sql的执行效率,适合无法在应用程序中修改sql时.sql profile最常用方法大概是:--创建产生sql tuning advisor任务DECLAREtuning_task varchar2(100);l_sql_id v$session.prev_sql_id%TYPE;BEGINl_sql_id ...

weixin_39975366的博客 430

sql优化之hint运用

HINT优化: 虽然ORACLE如今很智能几乎不用我们去干扰sql语句的执行计划,它就会按照一个正确的执行逻辑执行完你的sql得到你所要的结果。        不过有时面对大量的数据和频繁DML操作的表,ORACLE自己在执行sql 的时候可能也会发生错误,走错执行路径,你可能有时会发现一条很简单的sql语句执行了半天还没出来。这时候你就需要通过查看sql的执行轨迹是否符合正确的最好的那一条。

zhangss723的博客 1810
上一篇: Oracle 10g几种查找数据的方法
下一篇: SQL优化之不走索引_统计信息不对
narutobing
博客等级 码龄18年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值