`
liujiawinds
  • 浏览: 136277 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

既然有主键,为何还要建索引?

 
阅读更多

之前一直没用过oracle,数据库的基础也差,

这几天garry给讲了一些关于索引相关的东西,

虽然懂了不少还是有一些不清楚的地方。

 

如,

 

create table nice(
  id number(4) constraint pk_id primary key,
  name varchar2(20) constraint u_name unique
)

 

 在建表之后就会有两个index,select * from user_indexes where table_name="NICE";可以查看。

既然primary和unique是可以作为索引的,那么,为什么还要建索引呢,

在网上查到的说法,虽然清晰了一点,但是还是不是很清楚。

1.这个主键和索引并非是两个相同的东西,表中的主键一般作用是用来对记录进行区分的,使得记录可以唯一方便查找。但是又很多时候我们需要查找的并不是主键,而且其他的属性,比如学生表的主键是“学号”,但是我经常要根据学生的“姓名”来进行查询,那么建立索引就会提高查询效率(但相对的插入和删除的效率就会变慢)。

至于什么时候使用索引这个一般是根据场景决定的,索引会加快查询(select)的速度,但是会减慢(insert和delete)的速度,需要自己根据业务和数据权衡使用,很难有定论

2.主键只是不得重复的属性.按照主键查找,只能挨个的对比,找到相等的就ok

而索引呢,不必挨个对比. 就像哈希结构(虽然很多数据库不用哈希作为数据结构,但相似的道理),索引在你存储的时候会在键与"该组数据的物理位置"(就比如C中的数组,存储在连续的区域)建立关系(哈希中叫做哈希函数),这样在查询的时候:输入键->得到数据的位置->在那个位置上取出数据.所以比挨个对比快的多.

因此索引加快了查询,但是减慢了存储(插入,修改). 所以索引适合查询而不适合写数据

分享到:
评论

相关推荐

    简单例子理解主键,索引,聚集索引,复合索引,非聚合索引

    主键是什么? 答:拿主键可以唯一确定一条数据,它和物理存储排序一致,不能为空,一个表只能有一个。 原本没有创建的主键的表在磁盘上存储为: Id=0;username=username0;sex=男;address=浙江; Id=1;username=...

    MySQL 主键与索引的联系与区别分析

    所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述...

    39自增主键为什么不是连续的?.pptx

    39自增主键为什么不是连续的?.pptx

    goldengate同步无主键无唯一索引表的问题以及解决方案.docx

    GoldenGate 同步无主键无唯一索引表的问题及解决方案 在数据同步中,无主键无唯一索引表的同步问题是常见的困扰, GoldenGate 作为一款优秀的数据同步工具,也遇到了这个问题。因此,本文将讨论 GoldenGate 同步无...

    行业-67 基于主键的索引是如何设计的,以及如何根据主键索引查询?l.rar

    主键是数据库表中一个或多个字段的组合,其值在整个表中具有唯一性且不可为NULL。它的主要作用是确保数据的完整性,避免出现重复的记录。一个表只能有一个主键,但主键可以由单个字段或多个字段组成,即复合主键。 ...

    主键索引与唯一索引的区别

    1、 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 2、 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 3、 唯一性索引列允许空值,而主键列不允许为空值。 4、 主键列在创建时...

    67 基于主键的索引是如何设计的,以及如何根据主键索引查询?l.pdf

    接下来,文章中也提到了更进一步的索引设计,即将介绍为什么通常使用B+树来构建索引的数据结构。B+树是一种平衡的树形数据结构,它能够保证数据插入和查询操作的稳定时间复杂度。在B+树索引中,每个节点不仅可以存储...

    MySQL分区字段列有必要再单独建索引吗?

    然而,问题在于,如果一个表已经基于分区字段和其他字段建立了复合主键,是否还需要为分区字段单独创建索引? 首先,我们要理解分区和索引的作用。分区通过将数据分割到不同的物理存储块上,减少了查询需要扫描的...

    MySQL索引之主键索引

    - 不可为空:主键列的值不能为空,确保每个记录都有一个确定的标识。 - 单一性:每个表最多只能有一个主键,但可以有多个候选键(可以作为主键的键)。 在InnoDB存储引擎中,主键索引被用作聚集索引,这意味着数据...

    如何在oracle中查询所有用户表的表名、主键名称、索引、外键等

    根据提供的标题、描述以及部分代码内容,我们可以了解到这篇文章主要探讨的是如何在Oracle数据库中查询所有用户表的相关信息,包括表名、主键名称、索引、外键等元数据信息。接下来,我们将对这些知识点进行详细的...

    自增主键为什么不是连续的?.pdf

    在数据库设计中,自增主键(Auto Increment Primary Key)是一种常见的策略,用于为每条新插入的记录生成唯一的标识符。然而,自增主键并不总是连续的,这主要与数据库管理系统(如MySQL)如何处理自增值以及自增值...

    70 针对主键之外的字段建立的二级索引,又是如何运作的?l.pdf

    一个表中可以有多个索引,但主键索引是特别的,因为它是唯一的且不允许为空。除了主键索引之外,我们还可以创建二级索引,也就是所谓的辅助索引,来加速基于非主键字段的查询。 在InnoDB存储引擎中,默认创建了基于...

    OracleGoldenGate针对表没有主键或唯一索引的解决方案[归类].pdf

    Oracle GoldenGate 针对表没有主键或唯一索引的解决方案 Oracle GoldenGate 是一种 数据复制和集成工具,用于在不同的数据库管理系统之间复制和集成数据。然而,在使用 Oracle GoldenGate 复制事务数据时,如果表...

    数据库,索引,主键,约束,sql

    常见的索引类型包括B树索引、位图索引和哈希索引,每种都有其适用场景和性能特点。 主键是表中的一个或一组字段,用于唯一标识表中的每一行。它不允许重复且不能为空,确保了数据的唯一性和完整性。主键的选择通常...

    删除数据库的所有表、存储过程、主键、外键、索引等 .sql

    删除数据库的所有表、存储过程、主键、外键、索引等 .sql

    删除数据库的所有表、存储过程、主键、外键、索引等

    在数据库管理中,有时需要对数据库进行彻底清理,比如在测试环境或开发环境中重置数据库状态,以便重新开始。...正确执行这些操作有助于保持数据库的整洁和高效,同时也为新的开发和测试提供了一个干净的起点。

    聚簇索引与主键的选择

    聚簇索引与主键的选择一、什么是聚簇索引?二、什么是非聚簇索引?1. InnoDB引擎中2. MyISAM引擎中三、聚簇索引的优劣与主键选择的关系 一、什么是聚簇索引? 首先,聚簇索引不是一种单独的索引类型,其实是数据的...

    ARTools.Oracle抽取指定库的主键、外键、索引

    另附以下功能 * 生成目录树 * 生成迁移脚本 * 查找所有System.out,.err * 批量替换多关键字 详情见 http://blog.csdn.net/amosryan/article/details/6684465

    10.MySQL为什么有时候会选错索引?1

    `这个查询时,根据`a`字段上的索引,理论上应该扫描较少的行数,因为`a`上有索引。 然而,在另一个session B中,先删除了所有数据,再插入10万行新数据,这时优化器在选择索引时出现了偏差。原本应该使用`a`索引来...

Global site tag (gtag.js) - Google Analytics