ORACLE 组合索引 使用分析

简介: 在ORACLE 中可以创建组合索引,使用表中多个字段的组合作为索引的键值。 当我们进行查询时可以使用”where col1 = ? ”,也可以使用”where col1 = ? and col2 = ?”,这样的限制条件都会使用索引,但是”where col2 = ? ”查询就不会使用该索引。

在ORACLE 中可以创建组合索引,使用表中多个字段的组合作为索引的键值。

当我们进行查询时可以使用”where col1 = ? ”,也可以使用”where col1 = ? and col2 = ?”,这样的限制条件都会使用索引,但是”where col2 = ? ”查询就不会使用该索引。所以限制条件中包含先导列时,该限制条件才会使用该组合索引。

就此我做了下试验:

SQL> create table zh
  2  (it int,
  3   name varchar(30),
  4   id number(30));

表已创建。

SQL> R
  1  INSERT INTO ZH
  2* SELECT * FROM ZH

已创建147456行。

(创建了147456行)

SQL> COMMIT;

提交完成。

SQL> CREATE INDEX ZHIN
  2  ON ZH(IT,NAME);

索引已创建。

SQL> COMMIT;

提交完成。

SQL> INSERT INTO ZH
  2  VALUES(3,'GAOJING',444);

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> SELECT * FROM ZH
  2  WHERE IT=3;

        IT NAME                                   ID
---------- ------------------------------ ----------
         3 GAOJING                               444

SQL> SET AUTOTRACE ON;
SQL> R
  1  SELECT * FROM ZH
  2* WHERE IT=3

        IT NAME                                   ID
---------- ------------------------------ ----------
         3 GAOJING                               444


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT ptimizer=ALL_ROWS (Cost=4 Card=1 Bytes=43)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'ZH' (TABLE) (Cost=4 Card
   2    1     INDEX (RANGE SCAN) OF 'ZHIN' (INDEX) (Cost=3 Card=1)

 


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

SQL> L
  1  SELECT * FROM ZH
  2* WHERE IT=3
SQL> L2
  2* WHERE IT=3
SQL> C/IT=3/NAME='GAOJING'
  2* WHERE NAME='GAOJING'
SQL> R
  1  SELECT * FROM ZH
  2* WHERE NAME='GAOJING'

        IT NAME                                   ID
---------- ------------------------------ ----------
         3 GAOJING                               444


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT ptimizer=ALL_ROWS (Cost=201 Card=10 Bytes=
   1    0   TABLE ACCESS (FULL) OF 'ZH' (TABLE) (Cost=201 Card=10 Byte

SQL> select * from zh
  2  where it=3 and name='GAOJING';

        IT NAME                                   ID
---------- ------------------------------ ----------
         3 GAOJING                               444


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT ptimizer=ALL_ROWS (Cost=4 Card=1 Bytes=43)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'ZH' (TABLE) (Cost=4 Card
   2    1     INDEX (RANGE SCAN) OF 'ZHIN' (INDEX) (Cost=3 Card=1)

 


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


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

试验证明结果确实如此

相关文章
|
7月前
|
SQL Oracle 关系型数据库
Oracle-index索引解读
Oracle-index索引解读
195 0
|
1月前
|
SQL Oracle 关系型数据库
[Oracle]索引
本文介绍了数据库索引的基本概念、优化查询的原理及分类。索引是一种数据结构(如B树或B+树),通过排序后的`rowid`来优化查询性能。文章详细解释了索引的构建过程、B+树的特点及其优势,并介绍了五种常见的索引类型:唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。每种索引都有其适用场景和限制,帮助读者更好地理解和应用索引技术。
58 1
[Oracle]索引
|
3月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
583 2
|
7月前
|
SQL Oracle 前端开发
Oracle效率分析,Github标星25K+超火的前端实战项目
Oracle效率分析,Github标星25K+超火的前端实战项目
|
7月前
|
存储 Oracle 关系型数据库
Oracle索引知识看这一篇就足够
Oracle索引知识看这一篇就足够
|
索引
Oracle-序列、索引和同义词
Oracle-序列、索引和同义词
52 0
|
Oracle 关系型数据库 数据库
Oracle-Top-N分析
Oracle-Top-N分析
66 0
|
7月前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
7月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析2
oracle基本笔记整理及案例分析2
|
7月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析1
oracle基本笔记整理及案例分析1

推荐镜像

更多