精华内容
下载资源
问答
  • 数据库中,什么是索引?为什么要建立索引
    千次阅读
    2018-08-26 15:43:44

    什么是索引?为什么要建立索引?

      索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

      例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。

      如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。

      如果有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。其中MySQL中的索引的存储类型有两种:BTREE、HASH。 也就是用树或者Hash值来存储该字段,要知道其中详细是如何查找的,就需要会算法的知识了。我们现在只需要知道索引的作用,功能是什么就行。

     

     

    转载自:https://www.cnblogs.com/whgk/p/6179612.html

    更多相关内容
  • 实验六 视图和索引 实验目的 (1)了解视图的重要性 (2)掌握视图的建立 (3)掌握视图的使用 (4)掌握索引的使用方法 (5)掌握索引的概念及分类
  • SQL 创建索引目的是什么?

    千次阅读 2021-03-14 22:20:50
    索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理...

    索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理直接有关。下面给出建立索引的方法和要点。

    §3.5.1 建立索引

    1. CREATE INDEX命令语法:

    CREATE INDEX

    CREATE [unique] INDEX [user.]index

    ON [user.]table (column [ASC | DESC] [,column

    [ASC | DESC] ] ... )

    [CLUSTER [scheam.]cluster]

    [INITRANS n]

    [MAXTRANS n]

    [PCTFREE n]

    [STORAGE storage]

    [TABLESPACE tablespace]

    [NO SORT]

    Advanced

    其中:

    schema ORACLE模式,缺省即为当前帐户

    index 索引名

    table 创建索引的基表名

    column 基表中的列名,一个索引最多有16列,long列、long raw

    列不能建索引列

    DESC、ASC 缺省为ASC即升序排序

    CLUSTER 指定一个聚簇(Hash cluster不能建索引)

    INITRANS、MAXTRANS 指定初始和最大事务入口数

    Tablespace 表空间名

    STORAGE 存储参数,同create table 中的storage.

    PCTFREE 索引数据块空闲空间的百分比(不能指定pctused)

    NOSORT 不(能)排序(存储时就已按升序,所以指出不再排序)

    2.建立索引的目的:

    建立索引的目的是:

    l 提高对表的查询速度;

    l 对表有关列的取值进行检查。

    但是,对表进行insert,update,delete处理时,由于要表的存放位置记录到索引项中而会降低一些速度。

    注意:一个基表不能建太多的索引;

    空值不能被索引

    只有唯一索引才真正提高速度,一般的索引只能提高30%左右。

    Create index ename_in on emp (ename,sal);

    取消

    评论

    展开全文
  • PAGE PAGE 1 第7章索引 课程名称 MySQL数据库应用实战教程慕课版 项目名称 索引 任务名称 索引 课时 4 项目性质 演示性 验证性 设计性 综合性 授课班级 授课日期 授课地点 教学目标 能力目标 具备使用索引的能力 ...
  • 索引是以表列为基础的数据库对象,它保存着表排序的索引列,并且记录了索引数据表的物理存储位置,实现了表数据的逻辑排序,其主要目的是提高SQL Server系统的性能,加快数据的查询速度和减少系统的响应...

    索引的用途

    索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序,其主要目的是提高SQL Server系统的性能,加快数据的查询速度和减少系统的响应时间。
    使用索引的代价
    建立索引的几点原则。

    (1) 定义有主键的数据列一定要建立索引。因为主键可以加速定位到表中的某一行。

    (2) 定义有外键的数据列一定要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。

    (3) 对于经常查询的数据列最好建立索引。

    ① 对于需要在指定范围内快速或频繁查询的数据列,因为索引已经排序,其指定的范围是连续的,查询可以利用索引的排序,加快查询的时间。

    ② 经常用在WHERE子句中的数据列,将索引建立在WHERE子句的集合过程中,对于需要加速或频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,加快查询的时间。

    (4) 对于那些查询中很少涉及的列、重复值比较多的列不要建立索引。例如,在查询中很少使用的列,有无索引并不能提高查询的速度,相反增加了系统维护时间和消耗了系统空间;又如,“性别”列只有列值“男”和“女”,增加索引并不能显著提高查询的速度。

    (5) 对于定义为text、image和bit数据类型的列不要建立索引。因为这些数据类型的数据列的数据量要么很大,要么很小,不利于使用索引。

    展开全文
  • 假设有一张表,表有100万条数据,这100万条数据硬盘上是存储数据页上的,一页数据大小为16k。存储100万条数据那么就需要数据页,假设其中有一条数据是“id为7900”的,那么如果要查询这条数据,其中SQL是...

    为什么要用索引

    假设有一张表,表中有100万条数据,这100万条数据在硬盘上是存储在数据页上的,一页数据大小为16k。存储100万条数据那么就需要数据页,假设其中有一条数据是“id为7900”的,那么如果要查询这条数据,其中SQL是SELECT * FROM 表名 WHERE id = 7900。在执行这条SQL语句的时候,MySQL需要扫描全表来查询id = 7900的记录。
    全表扫描就是从“数据页1”开始,向后逐页查询。对于少量数据来说,查询的速度会很快,但是,当随着数据量的增加,性能会急剧下降。100万条数据进行逐页查询的时间是无法被用户所接受的。

    索引是什么

    索引是帮助MySQL高效获取数据的数据结构
    是排好序的快速查找的数据结构。

    索引就是类似于书的目录。

    数据库在存储数据本身以外,还有维护着一个满足特定查找算法的数据结构,这些数据结构就以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

    索引的原理

    索引的目的在于提高查询效率,与我们查询图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。相似的例子还有:查字典、查火车车次,飞机航班等。

    本质上都是:通过不断地缩小想要获取数据的范围来筛选出最最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们就可以总是用同一种查找方式来锁定数据。

    索引类似于书的目录,在一本书前面加上目录,查找内容时就不必逐页翻阅就能够快速地找到所要查找的内容。借助索引,执行查询时就不必扫描整个表就能够快速地找到所需要的数据。

    优点

    索引提高了数据检索的效率,降低了数据库IO成本。

    通过索引列对数据进行排序,降低了数据排序的成本,降低了CPU的消耗。

    缺点

    实际上,索引本质上也是一张表,这个表保存了主键与索引之间的字段,并指向实体表的记录,所以索引列也是要占用磁盘的空间。

    虽然索引大大提高了插叙的速度,但同时也会降低更新表数据的速度。例如:INSERT、UPDATE和DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一次索引文件,每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。

    创建索引的原则

    索引虽好,但也不能乱用。

    什么情况下需要索引

    1. 主键自动建立唯一索引。
    2. 频繁作为查询条件的字段应该创建索引(WHERE 后面的语句)。
    3. 查询中与其它表关联的字段,外键关系建立索引。
    4. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度分组中的字段。

    什么情况下不需要索引

    1. 表记录过少
    2. 经常性的增删改的表。虽然有提高了查询的速度,但同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引的文件。(所以在遇到这种情况下,就会分表,分表就是将读、写的数据进行分离)
    3. WHERE条件里用不到的字段不会创建索引
    4. 数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列表建立索引,某个数据列包含许多重复的内容,建立索引没有太大的实际效果。

    索引的分类

    主键索引

    就是设定主键后数据库会自动建立索引,一个表只能有一个主键。

    ALTER TABLE 表名 ADD PRIMARY KEY 表名(列名);

    删除主键索引:

    ALTER TABLE 表名 DROP PRIMARY KEY;

    单值索引

    就是一个索引只包含单个列,一个表可以有多个单列索引。
    加这个索引肯定是比不加索引要快的。

    创建单值索引:

    CREATE INDEX 索引名 ON 表名(列名);

    删除索引:

    DROP INDEX 索引名;

    唯一索引

    索引列的值必须唯一,允许为null;

    CREATE UNIQUE INDEX 索引名 ON 表名 (列名);

    删除索引:

    DROP INDEX 索引名 ON 表名;

    组合索引(复合索引)

    即一个索引包含多个列,在数据库操作期间,复合索引比单值索引所需要的开销是更小的(对于相同的多个列键索引)

    当表的行数远大于索引列的数目时可以使用复合索引。

    创建复合索引

    CREATE INDEX 索引名 ON 表名(列1,列2,…);

    删除索引

    DROP INDEX 索引名 ON 表名;

    组合索引最左前缀原则
    例如表中有a,b,c 3列,为a,b两列创建组合索引,那么在使用时需要满足最左侧索引原则。即在使用组合索引的列为条件的时候,是必须要出现最左侧列作为条件,否则索引是不生效的。

    例如:

    SELECT * FROM 表名 WHERE a = ' ' AND b = ' ' ; #索引生效
    SELECT * FROM 表名 WHERE b = ' ' AND b = ' ' ; #索引生效
    SELECT * FROM 表名 WHERE a = ' ' AND b = ' ' ; # 索引生效
    SELECT * FORM 表名 WHERE b = ' ' AND c = ' ' ; # 索引不生效

    全文索引(仅在MySQL8之后有)

    是需要模糊查询的,一般索引是无效的,这个时候就可以使用全文索引。

    比如: WHERE name LIKE %J%,这样查询的时候,即使name列添加了索引,但也会索引失效的。所以是不建议使用的,在MySQL8当中就建议使用全文索引。

    创建全文索引列:

    CREATE FULLTEXT INDEX 索引名 ON 表名(列名) WITH TARSER ngram;

    使用全文索引:

    SELECT * FROM 表名 WHERE MATCH(列名) AGAINST(‘输入的参数’);

    全文索引的插叙效率是比使用LIKE来查询要快的,所以在MySQL8之后是建议使用全文索引的。

    查找索引:

    SHOW INDEX FROM 表名;

    索引的数据结构

    在MySQL数据库中的InnoDB引擎是使用B+树来进行数据存储的。

    B+树由二叉查找树、平衡二叉树(AVLTree)和平衡多落查找树(B-Tree)逐步优化而来的。使其更适合实现外存索引结构。

    B+数的特点:

    1. 它是排好序的,一个节点可以存储多个数据。
    2. 非叶子节点是不存储数据的,只存储索引,是可以放更多的索引。
    3. 数据都是存放在在叶子节点中的。
    4. 所有的叶子节点之间都是有一个链指针的。

    就是使用B+树使得树是横向扩展的,让树的高度降低了。在叶子节点也可以存储多个数据。
    在这里插入图片描述

    MySQL所以使用B+树,因为索引是用来加快查询的,而B+数通过对数据进行排序所以是可以提高查询速度,然后通过一个节点可以存储多个元素,从而可以使得B+树的高度不会太高。并且叶子节点之间存在指针,可以很好的支持全表扫描,范围查找等SQL语句。

    聚簇索引和非聚簇索引

    聚簇索引
    就是找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引。

    非聚簇索引
    索引的存储和数据的存储时分离的,也就是意味着找到了索引但没有找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。

    举例:
    先创建一个表,用来说明说明情况下是聚簇索引和非聚簇索引:

    CREATE TABLE student (
      `id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '主键id',
      `name` VARCHAR (50) COMMENT '学生姓名',
      `age` INT NOT NULL DEFAULT 0 COMMENT '学生年龄',
      KEY `idx_name` (`name`)
    )
    

    创建的数据库表中,主键id是一个索引,给age添加了索引。

    ① 直接根据主键查询获取所有字段数据,此时主键就是聚簇索引。因为主键对应的索引叶子节点存储的就是id的所有字段值。

    SELECT * FROM student WHERE id = 1;

    在这里插入图片描述

    ② 根据name查询所有信息,name本身就是一个唯一索引,但查询的数据包括了所有的数据,所以当命中name索引的时候,该索引的节点的数据存储的就是主键的ID,然后需要ID再查询一次。
    这就是非聚簇索引。

    SELECT * FROM student WHERE name = “张三”;

    索引就是再单独的创建一张表,在这个表中查找数据,然后拿到ID在返回所有数据的表中查询所有的数据。

    ③ 根据name查询的时候,我们只查询name的值,不查询其他的信息。这种查询就是命中name索引,直接返回name的值,因为所需要的数据就是索引,此时不需要会表查询。这种场景就是非聚簇索引。

    SELECT name FROM student WHERE name = “张三”;


    拓展
    在MySQL中InnoDB引擎的索引和文件是存放在一起的,找到索引就可以找到数据,是聚簇式设计。(默认是聚簇设计的,当你加上其他的索引,根据变化就成为了非聚簇式)

    而MyISAM引擎采用的是非聚簇式设计,索引文件和数据文件不在同一个文件中。(不管怎么创建,它本质上就是非聚簇的设计)

    因为在MyISAM当中,它是在MYD中存储文件的数据;在MYI中存储文件的索引;在sdi中存储表的结构。
    在这里插入图片描述

    展开全文
  • 数据库系统之索引

    千次阅读 2021-12-07 22:21:53
    和书索引一样,数据库索引提供了指向包含特定值的数据的指针。例如可以运用索引找到具有特定的ID的instruetor记录,或者具有特定的name的所有instructor记录。散列是另一种索引方式,某些情况下速度更快。物理...
  • 数据库为什么要建立索引

    千次阅读 2018-06-03 16:46:23
    一:什么是索引?索引(Index)是帮助MySQL高效获取数据的数据结构。二:为什么要建立索引?一个没有索引的数据库表就相当于一本...三:选择什么字段建立索引索引也是要占用存储空间的,建立索引的时候也是有一定...
  • mysql数据库正确建立索引及使用

    千次阅读 2015-09-19 10:00:37
    5、 WHERE和JOIN出现的列需要建立索引。 6、 以通配符% 和_ 开头作查询时,mysql索引是无效的。但是这样索引是有效的:select * from tbl1 where name like 'xxx%',所以mysql正确建立索引是很重要的。 ...
  • 浅谈数据库索引

    2020-12-14 21:45:06
    1.什么是索引  数据库索引好比是一本书前面的目录,能加快数据库的查询速度。  例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于...  建立索引目的是加快对表
  • 数据库建立索引为什么会加快查询速度 首先明白为什么索引会增加速度,DB执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就...
  • Mysql创建索引相关知识
  • SQL 创建索引目的是什么?

    万次阅读 2020-01-09 16:21:15
    一、SQL创建索引目的如下: 1、通过唯一性索引(unique)可确保数据的唯一性; 2、加快数据的检索速度; 3、加快表之间的连接; 4、减少分组和排序时间; 5、使用优化隐藏器提高系统性能。 二、创建SQL索引...
  • 数据库中索引(index)介绍

    万次阅读 2019-01-16 10:14:15
    本文主要介绍数据库中索引(index)的相关知识。 1 概述 1.1 What 数据库中索引(index),是数据库管理系统(DBMS)的一个排序的数据结构,用于协助快速查询、更新数据库的数据。 除了实际需要使用的...
  • 数据库建立索引怎么利用索引查询

    千次阅读 2019-03-05 11:32:04
    数据库建立索引怎么利用索引查询?精选 1.合理使用索引 索引是数据库重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。 索引的使用要恰到好处,其...
  • SQL索引在数据库优化占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,这里将带你一步步揭开他的神秘面纱。 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引索引主要...
  • 使用索引可快速访问数据库的特定信息。索引是对数据库一列或多列的 值进行排序的一种结构,例如 employee 表的姓(lname)列。如果要按姓查找 特定职员,与必须搜索表的所有行相比,索引会帮助您更快地...
  • 数据库联合索引

    2022-04-11 15:34:15
    数据库索引、优化、联合索引、组合索引
  • 数据库索引实现原理

    万次阅读 多人点赞 2019-04-15 16:28:54
    MySQL索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。 MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域...
  • 数据库中聚集索引和非聚集索引

    万次阅读 2018-06-09 17:17:08
    聚集索引:类似字典的拼音目录。表的数据按照聚集索引的规则来存储的。就像新华字典。...不应该建需要频繁修改的列上,因为聚集索引的每次改动都以为这表数据的物理数据的一次重新排序。就想新华字典一...
  • 数据库索引是什么 有什么优缺点

    千次阅读 2018-11-28 14:48:44
    数据库索引是:数据库索引就像是一本书的目录一样,使用它可以让你在数据库里搜索查询的速度大大提升。而我们使用索引目的就是,加快表的查找和排序。索引的种类分为普通索引、唯一索引、聚集索引、主键索引、...
  • 关系型数据库中索引

    千次阅读 2019-07-13 11:56:44
    说白了索引就是一个查找问题 索引是对数据库的一列或者说是多列进行排序的一种结构,使用索引可以快速访问数据库的特定信息。索引的一个主要目的...但是有了索引之后(必须id这一列上建立索引),即可...
  • 为数据表创建索引目的是什么

    千次阅读 2021-01-29 18:21:30
    一、SQL创建索引目的如下:1、通过唯一性索引(unique)可确保数据的唯一性;2、加快数据的检索速度;3、加快表之间的连接;4、减少分组和排序时间;5、使用优化隐藏器提高系统性能。二、创建SQL索引的语法:CREATE ...
  • 数据库索引及其数据结构

    千次阅读 2018-04-08 20:26:04
    数据库索引,是数据库管理系统一个排序的数据结构,以协助快速查询、更新数据库数据。索引的实现通常使用B树及其变种B+树。数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种...
  • MySQL数据库索引

    万次阅读 多人点赞 2018-09-23 09:31:41
    目录 索引是什么 索引有哪些结构 数据库有哪些索引 唯一索引 聚簇索引与非聚簇索引 ...全文索引 ...使用索引一定能提高查询性能吗?...MySQL 5.6,对索引做了哪些优化? 索引是什么 索引是对数据库一个或...
  •   当表的数据量比较大时,查询操作会比较耗时,建立索引是加快查询速度的有效手段。根据需要可以基 本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。   数据库索引有多种类型,常见文件的索引...
  • 数据库索引

    千次阅读 2019-08-13 08:51:17
    索引的一个主要目的就是加快检索表数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。 索引的使用场景 经常需要搜索的列上。 作为主键的列上。 经常用连接的列上,这些列主要是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 165,697
精华内容 66,278
关键字:

在数据库中建立索引的主要目的是