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

    千次阅读 2020-05-14 00:01:50
    答:索引是定义在table基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一种索引项由索引字段和行指针构成。 索引的好处? 通过创建索引,可以在查询...

    什么是数据库索引?

    答:索引是定义在table基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一种索引项由索引字段和行指针构成。

    索引的好处?

    1. 通过创建索引,可以在查询的过程中,提高系统的性能;
    2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;
    3. 在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间;

    索引的坏处?

    1. 创建索引和维护索引要耗费时间,而且时间随着数据量的增加而增大;
    2. 索引需要占用物理空间,如果要建立聚簇索引,所需要的空间会更大;
    3. 在对表中的数据进行增加删除和修改时需要耗费较多的时间,因为索引也要动态地维护;

    什么是稠密索引和稀疏索引?

    • 稠密索引:对于主文件中每一个记录都对应一个索引项;
      • 候选键属性的稠密索引:先查索引,然后再依据索引读主文件;
      • 非候选键属性的稠密索引:
        • 主文件按索引字段排序,索引文件中的索引字段值无重复;
        • 主文件索引字段未排序,但索引文件中的索引字段值是有重复的;
        • 主文件索引字段未排序且索引文件中的索引字段值无重复,这时可以引入指针桶来处理;
    • 稀疏索引:对于主文件中部分记录有索引项和它对应(要求主文件必须是按对应索引字段属性排序存储);

    什么是主索引和辅助索引?

    • 主索引:对每个存储块有一个索引项,每个存储块的第一个记录叫锚,通常建立在有序文件的基于主码的排序字段上,属于稀疏索引。
    • 辅助索引:是定义在主文件的任一或多个非排序字段上的辅助存储结构,属于稠密索引。

         补充:一个主文件可以有一个主索引,但可以有多个辅助索引。

    什么是聚簇索引和非聚簇索引?

    • 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据,主文件按照对应字段排序存储,索引文件无重复排序存储。
    • 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,主文件并没有按照对应字段排序存储,索引文件有重复排序存储。

    补充:

    1. 如果主文件的某一排序字段不是主码,则该字段上每个记录取值便不唯一,此时该字段被称为聚簇字段,聚簇索引通常是定义在聚簇字段上。
    2. 聚簇索引通常是对聚簇字段上每一个不同值有一个索引项。
    3. 一个主文件只能有一个聚簇索引文件,但可以有多个非聚簇索引文件。
    4. 主索引通常是聚簇索引,辅助索引通常是非聚簇索引
    5. 主索引/聚簇索引是能够决定记录存储位置的索引,而非聚簇索引则只能用于查询,不能改变物理位置。

    为什么主键通常建议使用自增id?

    答:聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的。如果主键不是自增id,那么可以想象,它会干些什么,不断地调整数据的物理地址、分页。

    mysql中聚簇索引的设定?

    答:聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。

    什么是倒排索引和正排索引?

    • 倒排索引:一个词汇包含在哪些文档中,倒排索引主要由两个部分组成:“单词词典”和“倒排文件”,应用于搜索引擎。
    • 正排索引:一个文档包含了哪些词汇。

    其他结构的索引?

    • 多级索引:对索引再建立索引,如B书/B+树等;
    • 多属性索引:索引字段由多个属性组合一起形成的索引;
    • 散列索引:使用散列技术组织的索引;
    • 网络索引:使用多索引字段进行交叉联合定位与检索;

    B+树

    B+树是通过二叉查找树,再由平衡二叉树,B树演化而来。

    二叉排序树:左子树的键值总是小于根的键值,右子树的键值总是大于根的键值,因此可以通过中序遍历得到键值的排序输出。

    平衡二叉树:首先复合二叉查找树的定义,其次必须满足任何节点的两个子树的高度最大差为1.(平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。)

    m阶B-树:树中每个结点至多m棵子树、非叶子结点的根结点至少有两棵子树、除根结点外的非叶子结点至少有m/2棵子树、所有的叶子结点出现在同一层,并且不带信息,通常称为失败结点、树中每个结点的关键字有序,且关键字的左子树中的关键字均小于它,右子树均大于它。(单个节点可以存储多个键值和数据的平衡树)

    m阶B+树:与B-树差异在于有n棵子树的结点中含有n个关键字、所有的叶子节点包含了全部关键字的信息,以及指向这些关键字记录的指针、所有的非终端结点可以看成是索引部分,结点中仅含有其子树中最大的关键字。

    B+树相比B-树的优先?

    1. B+ 树非叶子节点上是不存储数据的,仅存储键值,而 B 树节点中不仅存储键值,也会存储数据,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的 IO 次数又会再次减少,数据查询的效率也会更快。
    2. B+ 树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,使得范围查找,排序查找,分组查找以及去重查找变得异常简单。

    Mysql索引

    • 普通索引

    最基本的索引,它没有任何限制。它有以下几种创建方式:

    CREATE INDEX indexName ON 表名(列名(length));  //创建索引
    ALTER 表名 ADD INDEX [indexName] ON (列名(length))  //修改表结构
    
    CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,INDEX [indexName] (username(length)) ); //创建表时直接创建索引
    
    DROP INDEX [indexName] ON 表名;  //删除索引
    
    • 唯一索引

    它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

    CREATE UNIQUE INDEX indexName ON 表名(列名(length)) 
    
    ALTER 表名 ADD UNIQUE [indexName] ON (列名(length)) 
    
    CREATE TABLE mytable(  
     
    ID INT NOT NULL,   
     
    username VARCHAR(16) NOT NULL,  
     
    UNIQUE [indexName] (username(length))  
     
    );  
    • 主键索引

    它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,即具有primary key约束的字段。

    • 组合索引
    ALTER TABLE 表名 ADD INDEX 索引名 (列名1,列名2,列名3);
    
    

    建立索引的时机是什么?

    答:在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引(以通配符%和_开头作查询时,MySQL不会使用索引)。

    使用索引的注意事项?

    • 索引不会包含有NULL值的列

    只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

    • 使用短索引

    对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

    • 索引列排序

    MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    • like语句操作

    一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

    • 不要在列上进行运算
    • 不使用NOT IN和<>操作

     

    展开全文
  • 达梦数据库的索引

    千次阅读 2019-11-13 22:20:46
    达梦数据库的索引一、索引概述二、创建索引:三、重建索引:四、删除索引: 一、索引概述 索引的作用:加快对表的查询,数据库对表做DML操作,默认的维护索引。 话外音:用到索引实际是对索引结构的遍历。索引的高度...

    一、索引概述

    索引的作用:加快对表的查询,数据库对表做DML操作,默认的维护索引。

    话外音:用到索引实际是对索引结构的遍历。索引的高度约高,说明数据越多。

    添加索引所具备的基本要求:
    1.经常查询的列;
    2.返回值是表的数据的一小部分;
    3.连接条件的列上;
    4.谓词经常出现的列(如where后面的列)。

    注意:列上有大量数据是null的不建议建索引,原因是索引不会存null

    达梦数据库的索引类型:
    二级索引,复合索引,函数索引,唯一索引,分区索引,位图索引,位图连接索引

    其中二级索引叫二级索引的原因是达梦数据库建表的时候有个默认索引,所以创建的新索引就为二级索引。

    二、创建索引:

    SQL> create table emp as select * from employee;
    
    例子:
    SQL> create tablespace indx datafile '/dm7/indx.dbf' size 32;
    SQL> create index ind_emp on emp (employee_id) tablespace indx;
    SQL> select table_name,index_name from user_indexes where table_name='EMP';
    
    SQL> explain select * from emp where employee_id<100;
    SQL> begin  dbms_stats.gather_table_stats('DMHR','EMP');
    end;---收集统计信息
    /
    

    注意:收集统计信息的动态采样一般在7%到10%之间,不要在系统业务高峰期进行收集统计信息操作。

    三、重建索引:

    SQL> alter index ind_emp rebuild;
    SQL> alter index ind_emp rebuild online;(建议使用)
    

    四、删除索引:

    SQL> drop index ind_emp;
    

    结后语:索引的创建、删除、重建要在非高峰期进行操作

    展开全文
  • 请问 为什么 数据库 的索引 利用 b-树实现。而不和主键一样用平衡二叉树实现,
  • 修改Mysql数据库的索引

    千次阅读 2019-06-20 11:16:06
    修改Mysql数据库的索引案例描述解决说明建立索引删除索引 案例 描述 原来的数据库索引 UNIQUE KEY `tablename` (`column1`,`column2`) USING BTREE 需要把column1,column2进行调换(以便使用column1进行百万级别...

    案例

    描述

    原来的数据库索引

    UNIQUE KEY `tablename` (`column1`,`column2`) USING BTREE
    

    需要把column1,column2进行调换(以便使用column1进行百万级别查询)。

    解决

    没找到直接修改索引的方法(有的话可以大家一起交流),通过先删除后建的方法实现。从效率上考虑也是要重新建立索引的,所以代价可以接受。
    通常使用(推荐)

    ALTER TABLE `表名` DROP INDEX 索引名;
    ALTER TABLE `表名` ADD UNIQUE 索引名  (`column2`, `column1`) USING BTREE;
    
    // 或者合到一条sql
    ALTER TABLE `表名` 
    DROP INDEX 索引名,
    ADD UNIQUE 索引名  (`column2`, `column1`) USING BTREE;
    

    其他方案如下(实践已能用):

    ## 删除唯一索引UNIQUE_APP_NAME,再重新建立一次
    DROP INDEX UNIQUE_NAME ON `tablename`;
    CREATE UNIQUE INDEX UNIQUE_NAME ON `tablename` (`column2`, `column1`) USING BTREE;
    

    或者

    ALTER TABLE `test`.`uuidtest` 
    DROP INDEX `test_index`,
    ADD INDEX `test_index`(`uuid`) USING BTREE COMMENT '测试注释';
    

    说明

    建立索引

    方法1

    ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)
    
    //普通索引
    alter table table_name add index index_name (column_list) ;
    //唯一索引
    alter table table_name add unique (column_list) ;
    //主键索引
    alter table table_name add primary key (column_list) ;
    

    方法2

    CREATE INDEX index_name ON table_name(username(length)); 
    
    //create只能添加这两种索引;
    CREATE INDEX index_name ON table_name (column_list)
    CREATE UNIQUE INDEX index_name ON table_name (column_list)
    

    删除索引

    drop index index_name on table_name ;
    
    alter table table_name drop index index_name ;
    alter table table_name drop primary key ;
    
    展开全文
  • Sybase数据库的索引

    千次阅读 2018-12-30 12:06:48
    创建Sybase数据库的索引应该在建数据表之后 创建语句如下: create index index_name on table_name(column_names) 删除index: drop index table.index 使用sp_help tablename查看建立在某张表上的index...

    创建Sybase数据库的索引应该在建数据表之后

    创建语句如下:

    create index index_name on table_name(column_names)

    删除index:

    drop index table.index

    使用sp_help  tablename查看建立在某张表上的index内容时,

    字段 index_ptn_name表示的是  索引的分区名

    【待续】

    展开全文
  • 你真的懂数据库的索引吗(下篇)

    千次阅读 2020-06-26 10:42:02
    文章目录普通索引和唯一索引的选择 =============================================== 普通索引和唯一索引的选择 你真的懂数据库的索引吗(上篇) 继上篇之后,今天来继续看看索引方面的知识。
  • ORACLE数据库的索引类型及其适用场景
  • 数据库的索引详解

    千次阅读 2017-04-08 10:43:43
    索引的重要性:当你的数据库的性能出现问题了,那么就重新优化你的索引吧,这能够解决80%的性能问题,由此可见索引的重要性,尤其在数据量越来越大的时候,影响更加的明显,一个最优的索引能够轻易的将查询性能提高...
  • 1.索引就像是书目录,是与表或视图关联磁盘上结构,可以加快从表或视图中检索行速度。索引中包含由表或视图中一列或多列生成键。这些键存储在一个结构(BTree)中,使SQL可以快速有效地查找与键值关联行...
  • 数据库的索引和试图

    千次阅读 2019-03-18 22:17:43
    普通索引: 就是一个普通的索引,可以空,可以重复。null ALTER TABLE teacher ADD INDEX (column); 唯一索引 : 可以为空,不可以重复 ALTER TABLE teacher ADD UNIQUE (column); ALTER TABLE teacher ...
  • 不经意间让我想起了数据库的索引,聚簇索引和唯一索引等,有了更进一步的理解,而且知道了它的时间空间效率。 索引顺序文件 索引顺序文件的效率分析: 多级索引顺序文件 参考:《王道操作系统》 ...
  • Mysql数据库的索引原理

    千次阅读 2013-06-28 14:20:53
    写在前面:索引对查询速度有着至关重要影响,理解索引也是进行数据库性能调优起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行...
  • 索引索引会加速查询, 但是会使增删改变慢 , 每次都要更新索引根据需求建索引, 经常查询属性索引相当于是一个目录, 可以加速查询提升查询效率索引是典型空间换时间技术,增加了索引查询更加快捷查询到想要...
  • 重建整个数据库的索引

    千次阅读 2005-04-08 17:15:00
    在数据库使用中,由于数据的导入导出,以及历史数据的积累,数据库的性能... ---重建整个数据库的索引proc (just for Sql Server2000)create procedure ReindexAllTable(@dbname sysname)asif object_id(tempdb..#ta
  • SqlServer数据库的索引

    千次阅读 2012-11-13 22:03:17
    用户对数据库最频繁操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行...索引是一个单独、物理的数据库结构,它是某个表中一列或若干列值集合和相应指向表中物理标识这些值数据页
  • 有时候为了提高查询数据的响应速度,都会创建一个索引,那创建索引为什么能够提升数据库的查询数据呢? 因为创建索引采用的平衡二叉树的原理,他的特点是:  如果是插入数据则需要重构索引,重新找寻平衡点(这个数据...
  • 一、深入浅出理解索引结构  实际上,您可以把索引理解为一种特殊目录。微软SQL SERVER提供了两种...下面,我们举例来说明一下聚集索引和非聚集索引的区别:   其实,我们汉语字典正文本身就是一个聚集索
  • 关系数据库的索引技术

    千次阅读 2008-03-26 10:21:00
    当今常用的关系数据库,如SQL Server、Sybase、Oracle、DB2等,为了提高性能,都提供相应的索引机制。本文以微软的SQL Server数据库为例,介绍索引的概念、使用方法以及日常维护。关键词:数据库、索引、检索1 索引...
  • 关系数据库的索引技术

    千次阅读 2007-10-22 21:32:00
    当今常用的关系数据库,如SQL Server、Sybase、Oracle、DB2等,为了提高性能,都提供相应的索引机制。本文以微软的SQL Server数据库为例,介绍索引的概念、使用方法以及日常维护。关键词:数据库、索引、检索1 索引...
  • 你真的懂数据库的索引吗(上篇)

    千次阅读 2020-06-25 14:46:21
    文章目录前情提要索引之常见模型三巨头 ===============================================================...索引,一个高大上名词,通俗来说就是目录,通过它能快速定位到你查找位置。 索引之常见模型三巨头 ...
  • 数据库的索引 1. 如果不建立索引,那么查询都需要全表扫描;如果建立了索引,则数据库会保存一个索引文件通常是特殊的结构比如b树,这样查询起来不需要全表扫描,一下子能够找到满足要求的记录。 2. 一般是对...
  • MySQL凭借着出色性能、低廉成本、丰富资源,已经成为绝大多数互联网公司首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好使用它,已经成为开发工程师必修课,我们经常会从职位描述...
  • 面试知识点---数据库的索引

    千次阅读 2008-10-15 20:22:00
    索引的分类:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。我们把这种内容本身就是一种按照一定规则排列目录称为“聚集索引”。 ...
  • 数据库索引

    万次阅读 多人点赞 2018-11-11 09:27:25
    说白了,数据库的索引问题就是查找问题 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树) 除了数据之外,数据库...
  • 数据库索引的优缺点和分类

    千次阅读 2016-08-19 16:42:42
    数据库的索引类似于书籍的索引。 在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库. 2、索引的优点  1.创建唯一...
  • Java面试之数据库——数据库索引

    万次阅读 2018-05-31 11:01:02
    原文:https://blog.csdn.net/sundacheng1989/article/details/53117172最近使用到Oracle数据库的索引比较多,所以就想好好研究一下索引到底是什么。毕竟作为一个Application Developer,而不是DBA,所以这篇文字也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,885
精华内容 35,954
关键字:

数据库的索引