精华内容
下载资源
问答
  • 数据库索引类型

    万次阅读 2009-05-31 09:59:00
    逻辑上:Single column 单行索引Concatenated 多行索引Unique 唯一索引NonUnique 非唯一索引Function-based函数索引Domain 域索引物理上:Partitioned 分区索引NonPartitioned 非分区索引B-tree:Normal 正常型B树...

    逻辑上:
    Single column 单行索引
    Concatenated 多行索引
    Unique 唯一索引
    NonUnique 非唯一索引
    Function-based函数索引
    Domain 域索引


    物理上:
    Partitioned 分区索引
    NonPartitioned 非分区索引
    B-tree:
    Normal 正常型B树
    Rever Key 反转型B树
    Bitmap 位图索引


    索引结构:
    B-tree:
    适合与大量的增、删、改(OLTP);
    不能用包含OR操作符的查询;
    适合高基数的列(唯一值多)
    典型的树状结构;
    每个结点都是数据块;
    大多都是物理上一层、两层或三层不定,逻辑上三层;
    叶子块数据是排序的,从左向右递增;
    在分支块和根块中放的是索引的范围;
    Bitmap:
    适合与决策支持系统;
    做UPDATE代价非常高;
    非常适合OR操作符的查询;
    基数比较少的时候才能建位图索引;
    树型结构:
    索引头
    开始ROWID,结束ROWID(先列出索引的最大范围)
    BITMAP
    每一个BIT对应着一个ROWID,它的值是1还是0,如果是1,表示着BIT对应的ROWID有值;

     

    B*tree索引的话通常在访问小数据量的情况下比较适用,比如你访问不超过表中数据的5%,当然这只是个相对的比率,适用于一般的情况。bitmap的话在数据仓库中使用较多,用于低基数列,比如性别之类重复值很多的字段,基数越小越好。

    展开全文
  • 数据库索引类型及实现方式

    万次阅读 2017-07-12 18:43:23
    数据库索引类型及实现方式 1、索引定义  数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。如果想...

    数据库索引类型及实现方式

    1、索引定义
      数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
    2、建立索引的优缺点:
    优点:
        1.大大加快数据的检索速度;   
        2.创建唯一性索引,保证数据库表中每一行数据的唯一性;   
        3.加速表和表之间的连接;   
        4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
    缺点:
    
      1.索引需要占用数据表以外的物理存储空间
    
      2.创建索引和维护索引要花费一定的时间
    
      3.当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。
    3、索引类型:
      根据数据库的功能,可以在数据库设计器中创建索引:唯一索引、主键索引和聚集索引。 尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。  
    
    唯一索引:   UNIQUE     例如:create unique index stusno on student(sno);
    表明此索引的每一个索引值只对应唯一的数据记录,对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。
    
    主键索引:   primary key
    数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。   在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。 
    
    聚集索引(也叫聚簇索引):cluster  
    在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。   如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
     
    4、索引的实现方式
    1 B+树
        我们经常听到B+树就是这个概念,用这个树的目的和红黑树差不多,也是为了尽量保持树的平衡,当然红黑树是二叉树,但B+树就不是二叉树了,节点下面可以有多个子节点,数据库开发商会设置子节点数的一个最大值,这个值不会太小,所以B+树一般来说比较矮胖,而红黑树就比较瘦高了。
    关于B+树的插入,删除,会涉及到一些算法以保持树的平衡,这里就不详述了。ORACLE的默认索引就是这种结构的。
    如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引本身就对应到两个字段上的,效率会有很大提高。
    
    2 散列索引
        第二种索引叫做散列索引,就是通过散列函数来定位的一种索引,不过很少有单独使用散列索引的,反而是散列文件组织用的比较多。
    散列文件组织就是根据一个键通过散列计算把对应的记录都放到同一个槽中,这样的话相同的键值对应的记录就一定是放在同一个文件里了,也就减少了文件读取的次数,提高了效率。
    散列索引呢就是根据对应键的散列码来找到最终的索引项的技术,其实和B树就差不多了,也就是一种索引之上的二级辅助索引,我理解散列索引都是二级或更高级的稀疏索引,否则桶就太多了,效率也不会很高。
    
    3 位图索引
        位图索引是一种针对多个字段的简单查询设计一种特殊的索引,适用范围比较小,只适用于字段值固定并且值的种类很少的情况,比如性别,只能有男和女,或者级别,状态等等,并且只有在同时对多个这样的字段查询时才能体现出位图的优势。
    位图的基本思想就是对每一个条件都用0或者1来表示,如有5条记录,性别分别是男,女,男,男,女,那么如果使用位图索引就会建立两个位图,对应男的10110和对应女的01001,这样做有什么好处呢,就是如果同时对多个这种类型的字段进行and或or查询时,可以使用按位与和按位或来直接得到结果了。
    
    B+树最常用,性能也不差,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以了。
    HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间。
    位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。
    展开全文
  • 关系型数据库索引类型

    千次阅读 2016-09-18 21:46:45
    索引类型分类: 1.主索引:主索引是一种只能在数据库表中建立不能在自由表中建立的索引。在指定的字段或表达式中,主索 引的关键字绝对不允许有重复值。 2.候选索引:和主索引类似,它的值也 不允许在指定的字段或...

    索引类型分类:

    1.主索引:主索引是一种只能在数据库表中建立不能在自由表中建立的索引。在指定的字段或表达式中,主索 引的关键字绝对不允许有重复值。

    2.候选索引:和主索引类似,它的值也 不允许在指定的字段或表达式中重复。一个表中可以有多个 候选索引。

    3.唯一索引:唯一索引允许关键字取重复的值。当有重复值 出现时,索引文件只保存重复值的第1次出现。提供唯一索引主要是为了兼容早期的 版本。

    4.普通索引:普通索引允许关键字段有相同值。在一对 多关系的多方,可以使用普通索引

    展开全文
  • 索引 索引分为主键索引、唯一索引、普通索引、聚集索引、全文索引几种,而索引其实就是在无序的数据中建立索引...索引类型 主键索引 数据列不允许重复,不允许为NULL,可以被引用为外键,一个表只能有一个主键索引 唯

    索引

    索引分为主键索引、唯一索引、普通索引、聚集索引、全文索引几种,而索引其实就是在无序的数据中建立索引,每次查询可以根据索引迅速查到我们想要的数据(就像字典的目录a-z一样)

    • 优点

      • 提高数据查找速度
      • 提高group by、order by分组与排序的时间
    • 缺点

      • 每增加数据都需要更新索引,随者数据量增大,索引维护成本会增加
      • 占用一定的存储空间,.myi后缀的文件存储的就是索引文件。

    索引类型

    主键索引

    数据列不允许重复,不允许为NULL,可以被引用为外键,一个表只能有一个主键索引

    唯一索引

    数据列不允许重复,允许为NULL值,不可以被引用为外键,一个表允许多个列创建唯一索引

    普通索引

    基本的索引类型,没有唯一性限制,允许为NULL值,不可以被引用为外键,一个表可以有多个普通索引

    主键索引、唯一索引、普通索引区别:

    索引类型 数据是否允许重复 是否允许NULL 是否可以当作外键 索引个数限制
    主键索引 仅有一个
    唯一索引 允许多个
    普通索引 允许多个

    表中可以看出约束是从高到低,对比表种内容然后依据不同场景进行使用

    聚集索引(聚簇索引)

    在聚集索引中,表中数据行的物理位置与逻辑值(索引和数据为同一个文件)的顺序相同,一个表中只能包含一个聚集索引,因为物理顺序只能有一个。聚集索引通常提供更快的数据访问速度。
    其中 InnoDB采用的就是聚簇索引,数据和索引文件为一个idb文件,表数据文件本身就是主索引,相邻的索引临近存储。 叶节点data域保存了完整的数据记录(数据[除主键id外其他列data]+主索引[索引key:表主键id])。 叶子节点直接存储数据记录,以主键id为key,叶子节点中直接存储数据记录。(底层存储结构: frm -表定义、 ibd: innoDB数据&索引文件)

    (1)如果表定义了主键,则PK就是聚集索引;
    (2)如果表没有定义主键,则第一个非空唯一索引(not NULL unique)列是聚集索引;
    (3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;

    在这里插入图片描述

    非聚簇索引

    索引和数据分开的索引
    其中MyISAM底层采用的就是非聚簇索引,使用myi索引文件和myd数据文件分离,索引文件仅保存数据记录的指针地址。叶子节点data域存储指向数据记录的指针地址。(底层存储结构: frm -表定义、 myi -myisam索引、 myd-myisam数据)
    在这里插入图片描述

    覆盖索引

    所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了
    MySQL 中只能使用 B-Tree 索引做覆盖索引,因为哈希索引等都不存储索引的列的值,覆盖索引对于 MyISAM 和 InnoDB 都非常有效,可以减少系统调用和数据拷贝等时间

    组合索引

    使用多个列来组成一个索引,比如B-Tree的方式

    全文索引

    主要用于海量数据的搜索,比如淘宝、京东对商品的搜索就可以建立全文索引(不可能用like模糊匹配吧),这个类型在mysql5.6开始支持InnoDB引擎的全文索引,功能没有专业搜索引擎比如solr、es丰富,如果需求简单,可以使用全文索引

    适用场景:适用于海量数据的关键字模糊搜索,比如简易版的搜索引擎

    索引的实现方式

    B-Tree索引

    InnoDB使用的是B-Tree算法,即每个叶子节点包含指向下一个叶子节点的指针,就像一个树一样

    在这里插入图片描述
    适用场景:最常用的一个索引类型,可以适用于多种场景

    工作原理:B-Tree索引中,联合索引中的索引项会先根据第一个索引列进行排序,第一个索引列相同的情况下,会再按照第二个索引列进行排序,依次类推。

    可以应用到B-Tree索引的情况:

    1. 全值匹配:查找条件和索引中的所有列相匹配
    2. 匹配最左前缀:查找条件只有索引中的第一列
    3. 匹配列前缀:比如有两个索引,一个是姓,一个是名,先找到zhang的列,然后再根据已找到的列找到名为s开头的人,也可以应用到索引
    4. 匹配范围值:比如查找姓在chen到zhang之间的人;或者查找姓为zhang,然后名为san到si范围的人
    5. 只访问索引的查询:即要查询的数据都在索引中包含,则只需要访问索引就行,无需访问数据行,比如只需要查询姓和名两列,而这两列刚好又是联合索引。这种索引被称作覆盖索引
    6. 索引排序:比如使用姓进行排序

    无法使用到B-Tree索引的情况:

    1. 索引不是最左列开始查找,则无法使用索引。比如直接查找名为san的人,则无法应用到索引
    2. 索引不全:比如有三个字段的联合索引,条件中只有第一个、和第三个的字段条件,跳过了中间某个列,则只能使用到索引的第一列
    3. 如果查询中有某个列的范围查询,则该列右边的所有列都无法使用索引优化查询(范围的话没有具体的值)。

    哈希索引

    如果在列上建立索引,则针对每一行数据,存储引擎会根据所有的索引列计算出一个哈希码,每一个行计算出的哈希码会组成一个哈希表,同时在哈希表中存储了指向每个数据行的指针。
    哈希表结构如下:
    在这里插入图片描述
    适用场景:仅作等值匹配且数据重复率低且对索引查找速度要求高的情况

    可以应用到哈希索引的情况:

    1. 只有精确匹配全部索引行的查询条件才能利用索引

    无法使用到哈希索引的情况:

    1. 索引中不包含任何列的值
    2. 索引无法应用于排序
    3. 不支持部分索引列匹配查找(必须使用全部索引列的查询条件才能使用哈希索引优化查询)
    4. 无法范围查找,只能等值比较
    5. 哈希冲突会影响性能:比如某个列的数据重复率非常高,则每次在找到匹配的哈希后还需要对这个哈希码的所有数据进行等值比较

    其中,还有一个叫做“自适应哈希索引”,是当InnoDB注意到某些索引的使用频率很高时,会在B-Tree索引之上再建立一层哈希索引,以提高查询效率

    空间数据索引(R-Tree)

    空间索引可用于地理数据存储,它需要GIS相关函数的支持,由于MySQL的GIS支持并不完
    善,所以该索引方式在MySQL中很少有人使用。

    扩展

    什么是回表

    如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就叫回表

    比如如下例子,先使用普通索引查询除出ID,然后再去聚簇索引查询具体数据的过程就叫左做回表
    在这里插入图片描述
    如何避免回表?

    使用聚集索引(主键或第一个唯一索引)就不会回表,普通索引就会回表

    比如select id, name, sex from user;,将单列索引(name)升级为联合索引(name, sex),即可避免回表,因为要查询的name和sex都在索引中了

    索引下推

    MySQL 5.6引入了索引下推优化,可以在索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表字数

    select * from tuser where name like '张 %' and age=10 and ismale=1;
    

    没有索引下推:首先根据索引来查找记录,然后再根据where条件来过滤记录(回表)
    有索引下推:MySQL会在取出索引的同时,判断是否可以进行where条件过滤再进行索引查询(回表)

    唯一索引导致死锁

    如图所示,有三个事务同时插入同一个记录,导致唯一索引冲突的过程:
    在这里插入图片描述
    死锁发生过程:

    1. T1时刻sessionA插入会加排他锁
    2. T2时刻SessionB插入同id会主键冲突,会加上共享锁
    3. T3时刻SessionC插入同id会主键冲突,会加上共享锁
    4. 这时,SessionA回滚释放排他锁,sessionB向获得排他锁,但发现sessionC有共享锁存在,B和C相互等待造成死锁

    根本原因:
    唯一索引导致,本质是并发请求导致一个数据重复插入或是网络抖动造成

    解决方案:

    1. 可以使用缓存将重复请求去重,确保同时只执行一个相同sql
    2. 异常捕捉,mysql有死锁检测和恢复,只有一个事务会成功,只需要catch异常即可
    展开全文
  • 数据库 索引类型及其区别

    千次阅读 2017-02-14 21:21:52
    Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函数索引 Domain 域索引 物理上: Partitioned 分区索引 NonPartitioned 非分区索引 B-tree: Normal...
  • 唯一索引/非唯一索引主键索引(主索引)聚集索引/非聚集索引组合索引唯一索引/非唯一索引唯一索引1.唯一索引是在表上一个或者多个字段组合...主键索引(主索引)是唯一索引的特定类型。表中创建主键时自动创建的索...
  • 数据库的五种索引类型

    万次阅读 多人点赞 2019-03-15 21:24:13
    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的...
  • 数据库索引

    千次阅读 多人点赞 2019-08-20 22:49:54
    文章目录数据库索引定义优缺点索引类型建立普通索引或组合索引适合建立索引的情况索引失效的sql 定义 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。数据库索引...
  • MYSQL数据库四种索引类型的简单使用

    万次阅读 2017-09-18 13:38:09
    MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与主键索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制。它有以下几种创建方式: 创建索引 CREATE ...
  • 数据库索引索引类型,各自特点

    千次阅读 2014-05-13 10:57:27
    索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。 索引是一个单独的、物理的数据库...
  • 以下的文章主要介绍的是MySQL数据库索引类型,其中包括普通索引,唯一索引,主键索引与主键索引,以及对这些索引的实际应用或是创建有一个详细介绍,以下就是文章的主要内容描述。 (1)普通索引 这是最基本的...
  • 1.什么是索引?为什么要用索引? 1.1索引的含义 1.2为什么用? 2.索引的作用与缺点 2.1作用 2.2缺点 3.索引的使用场景 3.1应创建索引的场景 3.2不应创建索引的场景 4.索引的分类与说明 4.1主键索引 ...
  • ORACLE数据库索引类型及其适用场景
  • 数据库索引常见四种类型

    万次阅读 2019-03-19 12:53:34
    索引分四类: index ----普通的索引,数据可以重复 fulltext----全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。 unique ----唯一索引,唯一索引,要求所有记录都唯一 primary ...
  • MYSQL数据库四种索引类型介绍

    千次阅读 多人点赞 2020-04-20 18:24:46
    MYSQL数据库四种索引类型 主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。 唯一索引: 索引列的所有值都只能出现一次,即必须唯一,值可以为空。 普通索引 : 基本的...
  • 索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
  • MySQL数据库索引

    万次阅读 多人点赞 2018-09-23 09:31:41
    数据库有哪些索引 唯一索引 聚簇索引与非聚簇索引 全文索引 使用索引一定能提高查询性能吗? 哪些情况下设置了索引但是无法使用 哪些情况下需要设置索引、哪些情况下不需要 什么情况下应该使用组合索引而非...
  • 本篇中记录下数据库索引相关的知识点! 索引是什么? 举个例子;大家去图书馆借书时,会先在电脑检索书名或作者等关键字信息,查询出该本书对应的一个图书索引后,紧接着就可以拿着这个图书索引去精确定位存放该索引...
  • 1. 什么是索引索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引中包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(BTree)中,使SQL可以快速有效地...
  • 数据库索引原理及优化

    千次阅读 2018-08-07 11:03:02
    特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常...
  • MySql数据库索引介绍

    千次阅读 多人点赞 2019-05-27 17:08:27
    数据库索引对我们来说是透明的,因为数据库表创建索引前后,SQL语句都可以正常运行,索引的运用只是数据库引擎工作时候的优化手段。但是,这并不是说数据库索引仅仅是数据库设计开发人员和运维人员的事情,对于一个...
  • 深入理解数据库索引

    千次阅读 2019-02-14 07:19:17
    前言:数据库和数据库索引这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是后端开发人员在行业内生存的必备技能。数据库索引是用来提高数据库表的数据查询速度的。 一、索引...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 468,220
精华内容 187,288
关键字:

数据库索引类型