前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Oracle Concept》第三章 - 2

《Oracle Concept》第三章 - 2

作者头像
bisal
发布2019-06-14 21:08:11
4430
发布2019-06-14 21:08:11
举报
文章被收录于专栏:bisal的个人杂货铺

背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。

前言《Introduction to Oracle Database》的历史文章

《Oracle Concept》前言-12c内容补充

《Oracle Concept》前言介绍-7

《Oracle Concept》前言介绍-6

《Oracle Concept》前言介绍-5

《Oracle Concept》前言介绍-4

《Oracle Concept》前言介绍-3

《Oracle Concept》前言介绍-2

《Oracle Concept》前言介绍-1

《Oracle Conecpt》 - 目录结构

《Oracle Conecpt》 - 初步认识1

第二章《Tables and Table Clusters》 历史文章

《Oracle Concept》第二章 - 21 (12c内容补充)

《Oracle Concept》第二章 - 20 (12c内容补充)

《Oracle Concept》第二章 - 19

《Oracle Concept》第二章 - 18

《Oracle Concept》第二章 - 17

《Oracle Concept》第二章 - 16

《Oracle Concept》第二章 - 15

《Oracle Concept》第二章 - 14

《Oracle Concept》第二章 - 13

《Oracle Concept》第二章 - 12

《Oracle Concept》第二章 - 11

《Oracle Concept》第二章 - 10

《Oracle Concept》第二章 - 9

《Oracle Concept》第二章 - 8

《Oracle Concept》第二章 - 7

《Oracle Concept》第二章 - 6

《Oracle Concept》第二章 - 5

《Oracle Concept》第二章 - 4

《Oracle Concept》第二章 - 3

《Oracle Concept》第二章 - 2

《Oracle Concept》第二章 - 1

第三章《Indexes and Index-Organized Tables》历史文章:

《Oracle Concept》第三章 - 1

本文主题:第三章《Indexes and Index-Organized Tables》 - Overview of Indexes。

键和列

键是一组能让你创建索引的列或者表达式的集合。尽管索引和键值经常互换使用,但他们二者,还是有些区别的。索引是存储在数据库中的结构,用户用SQL语句就能管理他们。而键值严格意义上讲是一个逻辑概念。

接下来的语句会在示例表oe.orders的customer_id列创建个索引:

代码语言:javascript
复制
代码语言:javascript
复制
CREATE INDEX ord_customer_ix ON orders (customer_id);INDEX ord_customer_ix ON orders (customer_id);

上面语句中,customer_id列是索引键值。索引的名称,叫做ord_customer_ix。

注意:

主键和唯一键会自动创建索引,但是你可能需要为外键手动创建索引。

P.S.

对于外键为何需要创建索引,可以参考《探究外键为何要建索引?》和《外键为何要建索引?》。

参考:

《Oracle Database SQL Language Reference》了解CREATE INDEX的语法和语义。

复合索引

复合索引,也叫组合索引,他是一个基于表中多列的索引。复合索引中的列应该按顺序出现在检索条件中,才能最大化检索表中不相邻行的数据。

复合索引能提高WHERE条件引用了复合索引中所有列或者前导部分列的SELECT语句的检索速度。因此复合索引中列的顺序就很重要了。通常,经常用到的列应该放在复合索引的前面。

例如,假设应用经常检索employees表的last_name,job_id和salary列。而且假设last_name列的cardinality集势很高,意味着相比表的数据量,他的唯一值的数量很高。你能按照下面的列顺序创建索引:

代码语言:javascript
复制
代码语言:javascript
复制
CREATE INDEX employees_ix   ON employees (last_name, job_id, salary);INDEX employees_ix
   ON employees (last_name, job_id, salary);

访问所有这三列,或者仅访问last_name列,或者仅访问last_name和job_id列,都能用上这索引。在示例中,不访问last_name列的检索,不会用到索引。

注意:

在一些场景中,例如当前导列的cardinality值很低,数据库可能会选择索引跳跃扫描(参考“Index Skip Scan”)。

如果每个索引中列的排序不同,同一张表就能存在多个索引。如果你指定了唯一不同的列排序,就能用同一列创建不同的索引。例如,接下来的SQL语句指定了有效的排列:

代码语言:javascript
复制
代码语言:javascript
复制
CREATE INDEX employee_idx1 ON employees (last_name, job_id);CREATE INDEX employee_idx2 ON employees (job_id, last_name);INDEX employee_idx1 ON employees (last_name, job_id);
CREATE INDEX employee_idx2 ON employees (job_id, last_name);

参考:

《Oracle Database Performance Tuning Guide》了解复合索引的更多信息。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年05月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档