访问路径是指数据库中访问表的方法,即使用哪个索引来访问表。
访问路径的分析是单表查询的最重要的问题之一,对于使用主表扫描的访问路径来说,执行时间一般与需要扫描的数据量(范围)成正比。一般来说,可以使用 EXPLAIN EXTENDED
命令,将表扫描的范围段展示出来。对于有合适索引的查询,使用索引可以大大减小数据的访问量,因此对于使用主表扫描的查询,要分析没有选中索引扫描的原因,是由于不存在可用的索引,还是索引扫描范围过大以至于代价过高。
OceanBase 数据库的路径选择方法融合了基于规则的路径选择方法和基于代价的路径选择方法。OceanBase 数据库首先会使用基于规则的路径选择方法,如果基于规则的路径选择方法之后只有一个可选择的路径,那么就直接使用该路径,否则就再使用基于代价的路径选择方法选择一个代价最小的路径。
在 OceanBase 数据库中,用户可以通过 HINT 来指定访问路径。访问路径的 HINT 形式如下: /+INDEX(table_name index_name)/
其中 table_name
表示表的名字,index_name
表示索引的名字。如果 index_name
是 PRIMARY,代表选择主表扫描路径。
如下为用 HINT 来指定访问路径的示例:
obclient>CREATE TABLE t1(a INT PRIMARY KEY, b INT, c INT, d INT, INDEX k1(b,c));
Query OK, 0 rows affected (0.10 sec)
obclient>EXPLAIN SELECT * FROM t1;
| ===================================
|ID|OPERATOR |NAME|EST. ROWS|COST|
-----------------------------------
|0 |TABLE SCAN|t1 |1000 |476 |
===================================
Outputs & filters:
-------------------------------------
0 - output([t1.a], [t1.b], [t1.c], [t1.d]), filter(nil),
access([t1.a], [t1.b], [t1.c], [t1.d]), partitions(p0)
obclient>EXPLAIN SELECT * FROM t1;
| =====================================
|ID|OPERATOR |NAME |EST. ROWS|COST|
-------------------------------------
|0 |TABLE SCAN|t1(k1)|1000 |5656|
=====================================
Outputs & filters:
-------------------------------------
0 - output([t1.a], [t1.b], [t1.c], [t1.d]), filter(nil),
access([t1.a], [t1.b], [t1.c], [t1.d]), partitions(p0)
分布式计划根据以下步骤分析查询问题:通过查看(g)v$plan_cache_plan_stat视图、(g)v$sql_audit中对执行计划类型的记录,确定是...
在 OceanBase 开发者中心(OceanBase Developer Center,ODC)单击连接名进入连接后,在左导航栏中单击 程序包 标签可以查看程序...
SQL 语句在普通 SQL 语句中,OceanBase 数据库支持如下 3 种注释方法:从#到行尾从--到行尾从数据库对象在 DDL 语句...
运行环境要求当前 DevEco Studio 只支持 Windows 版本,为保证 DevEco Studio 正常运行,建议您的电脑配置满足如下要求:操作系...
EnumMapjava.lang.Object |---java.util.AbstractMapK,V |---|---java.util.EnumMapK,Vpublic class EnumMapK extends EnumK,Vex...