精华内容
下载资源
问答
  • 索引有哪几种类型
    千次阅读
    2020-04-08 19:41:54

    索引的几种类型分别是普通索引、唯一索引、聚集索引、主键索引、全文索引。

     

    1. 唯一索引:在创建唯一索引时要不能给具有相同的索引值。
    2. 主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。
    3. 聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
    4. 普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
    5. 全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。


    使用索引的优点:

    提高数据的搜索速度
    加快表与表之间的连接速度
    在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

    使用索引的缺点:

    在我们建立数据库的时候,需要花费的时间去建立和维护索引,而且随着数据量的增加,需要维护它的时间也会增加。
    在创建索引的时候会占用存储空间。
    在我们需要修改表中的数据时,索引还需要进行动态的维护,所以对数据库的维护带来了一定的麻烦。


     

    更多相关内容
  • Mysql索引有哪几种类型

    万次阅读 2019-02-27 10:35:15
    索引是一将数据库中单列或者多列的值进行排序的结构。应用索引可以大幅度提高查询的速度。 用户通过索引查询数据,不但可以提高查询速度,也可以降低服务器的负载。用户查询数据时,系统可以不必遍历表中的所有...

    索引是一种将数据库中单列或者多列的值进行排序的结构。应用索引可以大幅度提高查询的速度。

    用户通过索引查询数据,不但可以提高查询速度,也可以降低服务器的负载。用户查询数据时,系统可以不必遍历表中的所有记录,而是查询索引列。

    但是,凡事都有双面性。对于依赖关系的子表和附表之间的联合查询时,使用索引可以提高查询速度,并且可以提高整体的系统性能。但是创建索引和维护需要耗费时间,并且该耗费时间与数据量的大小成正比;另外,索引需要占用物理空间,给数据的维护造成很多麻烦。

    整体来说,索引可以提高查询的速度,但是会影响用户操作数据库的插入操作。因为向右索引的表中插入记录时,数据库系统会按照索引进行排序。所以,用户可以将索引删除后,插入数据,当数据插入操作完成后可以重新创建索引。

     

    正题:MySQL索引分类

    MySQL索引包括普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引

    1、普通索引

    即不应用任何限制条件的索引,该索引可以在任何数据类型中创建。字段本身的约束条件可以判断其值是否为空或唯一。

    2、唯一索引

    使用UNIQUE参数可以设置唯一索引。创建该索引时,索引的值必须唯一。主键是一种特殊唯一索引。

    3、全文索引

    使用FULLTEXT参数可以设置全文索引。全文索引只能创建在CHAR、VARCHAR、TEXT类型的字段上。查询数据量较大的字符串类型字段时,使用全文索引可以提高查询速度。注意:全文索引在默认情况下是对大小写字母不敏感的,可以通过使用二进制对索引的列进行排序以执行大小写敏感的全文索引。MySQL中只有MyISAM存储引擎支持全文索引

    4、单列索引

    顾名思义,单列索引值对应一个字段的索引。可以包括上述的三种索引方式。应用该索引的条件只需要保证该索引值对应一个字段即可。

    5、多列索引

    多列索引是在表的多个字段上创建一个索引。该索引只想创建时对应的多个字段,可以通过这几个字段进行查询。要想应用该索引,用户必须使用这些字段中的第一个字段。

    6、空间索引

    使用SPATIAL参数可以设置控件索引。控件索引只能建立在控件数据类型(LINESTRING、POINT、GEOMETRY等)上,这样可以提高系统获取控件数据的效率。MySQL中只有MyISAM存储引擎支持空间索引,且该字段不能为空值。

     

    (存储引擎部分可以参考文章——常用的mysql存储引擎及其特点

    展开全文
  • 索引的种类

    千次阅读 2021-09-03 06:14:38
    索引有哪几种类型? 主键索引:数据列不允许重复,不允许为NULL,一个表只有一个主键。 唯一索引:数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引。 普通索引:基本的索引类型,没有唯一性的限制,...

    索引的种类

    索引有哪几种类型?

    1. 主键索引:数据列不允许重复,不允许为NULL,一个表只有一个主键。
    2. 唯一索引:数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引。
    3. 普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
    4. 全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。
    5. 覆盖索引:查询列要被创建的索引覆盖,不必读取数据行。
    6. 组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并。

    主键索引和非主键索引的区别?

    比如这个表(对k建立非主键索引):

    image-20210901154749251

    主键索引和非主键索引的示意图如下:

    image-20210901154809854

    其中Rx表示的是整行数据。而k索引里面存的是ID。

    所以主要的区别就是主键索引的叶子节点存放的是整行数据,而非主键索引的叶子结点存放的是主键的值。

    另外,主键索引也成为聚簇索引,而非主键索引被成为非聚簇索引或者二级索引。

    另外一个区别是,非主键索引查找到数据之后,需要回表查询数据。

    聚簇索引和非聚簇索引的区别?

    聚簇索引:索引项的排序方式和表中的数据记录排序方式一直的索引。也就是说聚簇索引的顺序就是数据的物理存储顺序。他会根据聚簇索引键的顺序来存储表中的数据,即对标的数据按照索引键的顺序进行排序,然后存储到磁盘上,因为数据在物理存放时只有一种排列方式,所以一个表只能有一个聚簇索引。(找到索引了就找到需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引。)

    非聚簇索引:索引数据和物理存储顺序不同。(索引的存储和数据的存储是分开的,也就是说找到了索引,但是没有找到数据,需要根据索引上的值在回表查询,所以非聚簇索引也叫辅助索引。)

    什么是覆盖索引?

    select * from T where k between 3 and 5

    ​ 比如查找k的范围为3-5,这时候因为k有索引,所以先根据k的索引找到对应的ID,然后再去主键索引上面搜索具体的信息,有回表。

    select ID from T where k between 3 and 5

    这个时候因为ID值已经在K索引树上了,因为可以直接提供查询结果,不需要回表。

    使用覆盖索引的好处?

    不需要回表 由于覆盖索引可以减少树的搜索次数,显著提升查询性能。

    什么是最左前缀原则?

    image-20210901154151717

    对于该表,如果按照name字段建立索引的话,采用B+树的话,大概索引如下:

    image-20210901154229096

    如果进行模糊查找的话,查找name以张开头的所有人的ID,select ID from table where name like '张%'.

    由于在B+树结构的索引中,叶子节点是一个有序链表,所以当我们定位到ID为100的张一之后,可以直接向右遍历所有张开头的人,直到条件不满足为止。这种定位到最左边,然后向右遍历寻找的方式就是最左前缀原则。

    比如:一个(a,b,c)的组合索引:

    1. 通过a,b条件查询能不能使用或命中这个索引?-----能
    2. 通过b,c条件查询能不能使用或命中这个索引?-----不能
    3. 原因:索引文件具有B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

    主键索引和唯一索引的区别?

    创建主键的时候会自动给主键添加索引,且该索引为唯一索引,即主键一定是唯一索引,但是一张表里可以有多个唯一索引,所以唯一索引不一定是主键。

    普通索引和唯一索引的区别?

    普通索引:普通索引的任务是加快对数据的访问速度。因此应该只为那些经常出现在查询条件where或者排序条件order by中的数据列创建索引。

    唯一索引:普通索引可以包含重复的值。而唯一索引里面不可以包含重复的值,在为这个数据列创建索引的时候就应该用关键字unique把他定义为唯一索引。

    定义成为唯一索引的好处:

    1. 简化了MySQL对这个索引的管理工作,这个索引也因此比较有效率
    2. MySQL在有新纪录插入数据表的时候,自动检查新纪录的这个字段是否已经在某个记录上出现过,如果是的话,MySQL会拒绝插入的那条新纪录。也就是说唯一索引可以保证数据记录的唯一性。

    唯一复合索引?

    紧接着上个例子,如果创建一个唯一复合索引的话:

    CREATE UNIQUE INDEX uni_user_info_pass ON user_info(name,pass);

    执行插入操作:

    insert into user_info value(600003. "chen","password",23);

    如果数据库中已经存在name和pass一样的数据的话,就会拒绝插入。

    换句话说,如果是复合型索引,并且是唯一的,只有当唯一复合索引的字段都相同的时候会进行唯一约束的作用。

    什么是组合索引(复合索引)?组合索引和普通索引的区别?

    当建立复合索引index(c1,c2,c3)就相当于创建了以下三个索引:

    index(c1)

    index(c1, c2);

    index(c1, c2, c3)顺序无关。

    索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA,columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。

    最左前缀原则:
    顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上,
    注:如果第一个字段是范围查询需要单独建一个索引
    注:在创建联合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。这样的话扩展性较好,比如 userid 经常需要作为查询条件,而 mobile 不常常用,则需要把 userid 放在联合索引的第一位置,即最左边

    同时存在联合索引和单列索引(字段有重复的),这个时候查询mysql会怎么用索引呢?

    这个涉及到mysql本身的查询优化器策略了,当一个表有多条索引可走时, Mysql 根据查询语句的成本来选择走哪条索引;

    有人说where查询是按照从左到右的顺序,所以筛选力度大的条件尽量放前面。网上百度过,很多都是这种说法,但是据我研究,mysql执行优化器会对其进行优化,当不考虑索引时,where条件顺序对效率没有影响,真正有影响的是是否用到了索引!如果使用联合索引,那么where条件也要尽量根据联合索引的顺序来,如果不按照顺序来,索引也同样会用到,但是在执行前,SQL优化器也会将条件调整为联合索引的顺序,既然可以直接避免这种情况,就没必要再让SQL优化器去处理,毕竟处理也是有开销的。

    联合索引本质:
    当创建(a,b,c)联合索引时,相当于创建了(a)单列索引,(a,b)联合索引以及(a,b,c)联合索引
    想要索引生效的话,只能使用 a和a,b和a,b,c三种组合;当然,我们上面测试过,a,c组合也可以,但实际上只用到了a的索引,c并没有用到!
    注:这个可以结合上边的 通俗理解 来思考!

    其他知识点:
    1、需要加索引的字段,要在where条件中
    2、数据量少的字段不需要加索引;因为建索引有一定开销,如果数据量小则没必要建索引(速度反而慢)
    3、如果where条件中是OR关系,联合索引不起作用
    4、联合索引比对每个列分别建索引更有优势,因为索引建立得越多就越占磁盘空间,在更新数据的时候速度会更慢。另外建立多列索引时,顺序也是需要注意的,应该将严格的索引放在前面,这样筛选的力度会更大,效率更高。

    什么是前缀索引?

    前缀索引是面对这样的一个场景,当需要索引一个比较长的字符比如BLOB或者text的时候,这样会使索引很慢。为了解决这种查找比较慢的话,一般有两种做法:第一种是改用hash索引。另外一种就是使用字符串的前几个字符作为索引即前缀索引。

    主要思路就是选择足够长的前缀以保证较高的选择性,同时又不能太长(造成空间浪费)

    所谓选择性,是指不重复的索引数量除以总记录数,范围是(0,1],唯一索引之所以查询效率高,是因为它的选择性等于1。

    缺点:MySQL中无法使用前缀索引进行ORDER BY和GROUP BY,也无法用来进行覆盖扫描

    最左前缀原则和最左匹配原则

    最左前缀原则:最左优先,以最左边的为起点,任何连续的索引都能匹配上。

    1. 如果第一个字段是范围查询需要单独建一个索引
    2. 在创建多列索引时,根据业务需求,where子句中最频繁的一列放在最左侧。

    比如:

    当创建(a,b,c)复合索引时,想要索引生效的话,只能使用 a和ab、ac和abc三种组合!

    实例:以下是常见的几个查询:

    mysql>SELECT `a`,`b`,`c` FROM A WHERE `a`='a1' ; //索引生效
    mysql>SELECT `a`,`b`,`c` FROM A WHERE `b`='b2' AND `c`='c2'; //索引失效
    mysql>SELECT `a`,`b`,`c` FROM A WHERE `a`='a3' AND `c`='c3'; //索引生效,实际上值使用了索引a

    扩展:想要索引最大化的使用需要至少建几个索引?

    答:需要建立复合索引:bc

    1. 建立联合索引测试:

    image-20210901173245737

    联合索引的顺序为:sex,age,name

    SELECT * FROM user where sex="3"; #使用索引
    SELECT * FROM user where age="4"; #未使用索引
    SELECT * FROM user where name="2"; #未使用索引
    SELECT * FROM user where sex="2" and age="3"; #使用索引
    SELECT * FROM user where sex="2" and age="3" and name="4"; #使用索引
    SELECT * FROM user where age="3" and name="4";  #未使用索引
    SELECT * FROM user where sex="2" and name="4";  #使用索引
    
    #这个在3.2最后边解释,为什么
    explain SELECT * FROM index_demo.user where age="2" and sex="3"; #使用索引

    值得注意的是,where sex=“2” and name=“4” 这个相当于只有sex使用到了索引的,

    1. 如果索引字段有两个 如果索引有两个字段:sex,age

    image-20210901173433920

    explain SELECT * FROM index_demo.user where sex="3"; #使用索引
    explain SELECT * FROM index_demo.user where age="4"; #未使用索引
    explain SELECT * FROM index_demo.user where sex="2" and age="3"; #使用索引
    explain SELECT * FROM index_demo.user where age="3" and sex="4";  #使用索引

    参考

    mysql聚簇索引 和主键的区别_一分钟明白MySQL聚簇索引和非聚簇索引

    MySQL主键索引(聚簇索引)与非主键索引(二级索引)

    索引(index)_普通索引、唯一索引和复合索引.索引查询

    普通索引和联合索引区别

    【mysql索引】之前缀索引

    什么是最左前缀原则?什么是最左匹配原则?

    展开全文
  • mysql常用四种索引类型

    千次阅读 2022-04-01 21:33:01
    唯一索引 (UNIQUE Indexs) 要求索引列的所有值都只能出现一次,即必须唯一。 普通索引 (Normal index) 仅用来提高查询速度,没有其他特性。 全文索引 (FULLTEXT Indexes) MySQL可以通过建立全文

    很好的博客,值得一看
    博客1:https://blog.csdn.net/baidu_35813686/article/details/84434404
    博客2:https://laowan.blog.csdn.net/article/details/108806141

    唯一索引 (UNIQUE Indexs)

    要求索引列的所有值都只能出现一次,即必须唯一。

    普通索引 (Normal index)

    仅用来提高查询速度,没有其他特性。

    全文索引 (FULLTEXT Indexes)

    MySQL可以通过建立全文索引,利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。比如实现全匹配模糊查询。
    但是实际场景测试mysql的全文索引性能非常不稳定,不建议生产环境使用。需要使用全文检索的地方,还是推荐使用Elasticsearch

    空间索引 (Spatial indexes)

    空间索引使用R树,R树是用于索引多维数据的专用数据结构。

    在这里插入图片描述

    展开全文
  • 数据库的五种索引类型

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

    千次阅读 2021-05-03 11:03:36
    索引的分类1二叉树索引或者叫B数索引(B-tree indexes),B树索引是使用最多的一种索引.在默认情况下,我们创建的索引都是B树索引.B树索引基于二叉树原理2.二叉树聚簇索引(B-tree Cluster indexes) 主要用于聚簇3.哈希聚...
  • MYSQL 索引类型

    千次阅读 多人点赞 2021-02-18 12:29:44
    一、索引类型 在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表 代码如下: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000...
  • 索引的种类哪些?

    千次阅读 2020-02-07 09:14:57
    主键索引:特殊的唯一索引,不允许 null,一张表最多一个主键索引 组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并 全文索引:对文本的内容进行分词、搜索 覆盖索引:查询列要被所建的索引覆盖...
  • 索引哪些类型

    万次阅读 2016-08-25 08:46:43
    一、唯一索引是什么?  1. 索引列(字段)的所有值都只能出现一次,即必须唯一 ---------------------... 主键是一约束,唯一索引是一种索引,两者在本质上是不同的。  2. 主键创建后一定包含一个唯一性索引,唯
  • Mysql目前主要的几种索引类型

    千次阅读 热门讨论 2019-04-23 14:57:50
    索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要的内容,所以当数据达到百万的时候,那么索引就很必要了。 索引优点: 1.大大加快数据的检索速度; 2.创建唯一性索引.....
  • Oracle中的索引分类

    千次阅读 2021-05-01 06:00:22
    Oracle中的索引分类(2012-05-01 08:12:24)标签:索引b树位图创建检索功能杂谈Oracle中可以创建多种类型索引,以适应各种表的特点和各种查询条件的特点;可以按列的多少,索引列是否唯一、索引数据的组织形式对索引...
  • 什么是索引?Mysql目前主要的几种索引类型

    万次阅读 多人点赞 2018-02-27 10:11:16
    一、索引MySQL索引的建立对于MySQL的高效运行是很...单列索引,即一个索引只包含单个列,一个表可以多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,你需要确保该索引是应用在 SQ...
  • 索引的几种类型分别是普通索引、唯一索引、聚集索引、主键索引、全文索引几种。 使用索引的优点: 提高数据的搜索速度 加快表与表之间的连接速度 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能...
  • MySQL索引哪些分类? 按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。 按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。 按字段特性分类可分为:主键索引、普通索引、前缀索引。 按字段个...
  • MYSQL有哪几种索引,你知道吗?

    万次阅读 2018-12-26 21:40:46
    MySQL目前主要以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二、语句 CREATE TABLE table_name[col_name data type][unique|fulltext][index|key][index_name](col_name...
  • 索引用来快速地寻找那些具有特定值的记录,所有的MySQL索引都以B-树的形式保存。如果没有索引,执行查询的时候MySQL必须从第一个记录开始扫描整个...如果表1000个记录,通过索引查找记录至少比顺序扫描记录快100倍。
  • PostgreSQL中的几种索引类型

    千次阅读 2019-08-07 08:32:25
    索引是增强数据库性能的利器,在检索某些特定行的时候效率会很大提升,postgresql中索引类型丰富,每种索引有着不同的应用场景,下面简单介绍一下。 索引类型与场景 BTree   • =, >, >=, <, <=、...
  • MySQL索引的概念以及七种索引类型介绍。
  • mysql索引有哪些类型

    千次阅读 2021-08-20 14:02:15
    MySQL目前主要索引类型为:普通索引、唯一索引、主键索引、组合索引、全文索引。 通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。索引优化时mysql中的一优化方式。索引的作用相当...
  • 索引的三数据结构

    千次阅读 2020-06-25 23:21:52
    索引可能数据结构哈希表、有序数组和N叉树。MySQL使用了B+树。 1.哈希表(散列表) 哈希表是一以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。 ...
  • 索引是对数据库表中一列或多列的值进行排序的一结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。 索引是一个单独的、物理的数据库...
  • 数据库索引常见四种类型

    万次阅读 2019-03-19 12:53:34
    索引分四类: index ----普通的索引,数据可以重复 fulltext----全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。 unique ----唯一索引,唯一...第一:index unique scan ...
  • SQL创建几种常见索引

    千次阅读 2022-02-22 09:48:27
    索引创建 1、主键索引: alter table table_name add primary key (column) 2、唯一索引: alter table table_name add unique (column) 3、普通索引: alter table table_name add index index_name (column) 4、...
  • 索引失效的几种情况

    千次阅读 多人点赞 2021-06-17 15:55:04
    口诀:带头大哥不能死,中间兄都不能断,索引列上无操作,范围右边全失效,like百分加右边,字符串中引号 准备: 建立员工记录表staffs(id,name,age,pos,add_time) 给表中name,age,pos字段添加索引(注意三个字段的...
  • MySQL索引优化的几种方式

    千次阅读 2021-11-06 11:22:04
    索引高性能优化 1. 使用独立的索引列 ​ 错误的查询语句会使得索引无效… select user_id from user where user_id-1=4; 第一个例子中,对索引列user_id进行了一次方程运算,然后进行查询,然而这样的操作MySQL...
  • MySQL5种索引类型

    千次阅读 2018-12-06 13:36:32
    MySQL目前主要以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二、语句 CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name...
  • MySQL索引失效的几种情况汇总

    千次阅读 2022-05-11 23:35:34
    更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引,只能全表扫描。 为什么索引列不能存Null值? 将索引列...
  • InnoDB中的索引类型

    千次阅读 2020-07-27 19:33:54
    InnoDB数据引擎使用B+树构造索引结构,其中的索引类型依据参与检索的字段不同可以分为主索引和非主索引;依据B+树叶子节点上真实数据的组织情况又可以分为聚族索引和非聚族索引。每一个索引B+树结构都会一个独立的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 509,546
精华内容 203,818
关键字:

索引有哪几种类型

友情链接: demo.rar