首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql中列举索引的几种分类

MySQL中的索引可以分为以下几种分类:

1. 单列索引(Single-Column Index)

单列索引是最基本的索引类型,它只针对表中的一个列进行索引。

优势

  • 提高查询速度。
  • 减少磁盘I/O操作。

应用场景

  • 经常用于WHERE子句中的列。
  • 主键列默认会有一个单列索引。

2. 多列索引(Composite Index)

多列索引是对表中的多个列进行索引,也称为联合索引。

优势

  • 可以提高涉及多个列的查询效率。
  • 减少磁盘I/O操作。

应用场景

  • 当查询条件经常涉及多个列时。
  • 查询条件中的列顺序应与索引中的列顺序一致。

3. 全文索引(Full-Text Index)

全文索引用于对文本数据进行全文搜索。

优势

  • 提高文本数据的搜索效率。
  • 支持复杂的搜索条件,如模糊匹配、布尔运算等。

应用场景

  • 文章、新闻、评论等文本数据的搜索。

4. 空间索引(Spatial Index)

空间索引用于对空间数据进行索引,如地理信息系统(GIS)中的点、线、面等。

优势

  • 提高空间数据的查询效率。
  • 支持复杂的地理空间查询。

应用场景

  • 地理信息系统(GIS)。
  • 地图应用。

5. 函数索引(Function-Based Index)

函数索引是对表中某一列进行函数运算后的结果进行索引。

优势

  • 提高涉及函数运算的查询效率。
  • 减少磁盘I/O操作。

应用场景

  • 当查询条件涉及函数运算时,如LOWER(column)DATE_FORMAT(column, '%Y-%m')等。

6. 唯一索引(Unique Index)

唯一索引确保表中的某一列或组合列的值是唯一的。

优势

  • 确保数据的唯一性。
  • 提高查询效率。

应用场景

  • 主键列。
  • 需要确保唯一性的列。

7. 主键索引(Primary Key Index)

主键索引是唯一索引的一种特殊形式,它确保主键列的值是唯一的,并且不允许为空。

优势

  • 确保数据的唯一性和完整性。
  • 提高查询效率。

应用场景

  • 表的主键列。

遇到的问题及解决方法

问题:为什么使用索引后查询速度没有提升?

原因

  • 查询条件中没有使用索引列。
  • 索引列的数据分布不均匀。
  • 查询条件使用了函数运算,导致索引失效。

解决方法

  • 检查查询条件是否使用了索引列。
  • 分析索引列的数据分布,必要时进行数据重分布。
  • 避免在查询条件中使用函数运算,或者创建函数索引。

问题:为什么索引过多会影响性能?

原因

  • 索引过多会增加磁盘I/O操作。
  • 插入、更新、删除操作需要维护索引,导致性能下降。

解决方法

  • 只对经常用于查询的列创建索引。
  • 定期分析和优化索引,删除不必要的索引。

示例代码

代码语言:txt
复制
-- 创建单列索引
CREATE INDEX idx_column1 ON table_name (column1);

-- 创建多列索引
CREATE INDEX idx_column1_column2 ON table_name (column1, column2);

-- 创建全文索引
ALTER TABLE table_name ADD FULLTEXT idx_fulltext_column (column);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_unique_column ON table_name (column);

-- 创建主键索引
ALTER TABLE table_name ADD PRIMARY KEY (column);

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Mysql索引分类

但是Mysql是如何利用B 树进行查询呢?索引作用只是提高查询效率吗? MysqlB Tree索引 假设有一张教师表,里面有教师编号、名字、学科、薪资四个字段。...当你执行下面这条创建索引sql语句时:create index id_name on teacher(name);Mysql就会在磁盘构建这样一颗B 树: ? 这样一棵树有什么用呢?...看看上面的单索引和复合索引就知道了。 有一个例外,当你select字段里有复合索引字段,那么where语句不需要满足最左前缀匹配,Mysql也会走索引。...除了聚簇索引mysql其他索引,都叫二级索引(secondary index),有时也翻译为“辅助索引”。...总结 这篇文章从一颗简单B 树,引申出了Mysql中常见几个索引概念: 单索引(Column Indexes):当你为一个字段建了索引时,mysql默默种了一棵树。

95810

Mysql索引失效几种原因

2.不适合键值较少列(重复数据较多列) 假如索引列TYPE有5个键值,如果有1万条数据,那么 WHERE TYPE = 1将访问表2000个数据块。...如果是这样条件where code like 'A % ',就可以查找CODEA开头CODE位置,当碰到B开头 数据时,就可以停止查找了,因为后面的数据一定不满足要求。...也可以通过反转字符串进行拼接 reverse('%易不杨') 最终会为 杨不易 4.索引失效几种情况 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or原因) 要想使用or...,又想让索引生效,只能将or条件每个列都加上索引 2.对于多列索引,不是使用第一部分,则不会使用索引 3.like查询以%开头 4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引...5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引 5.MySQL主要提供2种方式索引:B-Tree索引,Hash索引 B树索引具有范围查找和前缀查找能力,对于有N节点B树,检索一条记录复杂度为

2K10
  • Mysql-索引分类

    索引分类:1、按存储结构:B+Tree索引Hash索引2、按应用层次:主键索引(聚簇索引):索引值必须是唯一(不允许有空值、重复值) id int auto_increment primary...key自动创建主键索引普通索引MySQL基本索引类型,没有什么限制(允许有空值、重复值) create index 索引名 on 表 (列名,);创建表之后在创建索引 (推荐方式创建)唯一索引...:索引值必须是唯一(允许有空值) create unique index 索引名 on 表名(列名 desc,列名)全文索引:对文本内容进行分词,进行搜索()。...3、数据行物理顺序与列值逻辑顺序相同:聚集索引非聚集索引聚集索引与非聚集索引区别:(1)一个表只能拥有一个聚集索引, 而非聚集索引一个表可以存在多个。...(2)聚集索引索引中键值逻辑顺序决定了表相应行物理顺序; 非聚集索引索引索引逻辑顺序与磁盘上行物理存储顺序不同。

    12810

    MySQL 索引及其分类

    MySQL 索引可以包含一个活多个列值,因为 MySQL 只能高效地使用索引最左前缀列,所以包含多个列索引顺序也十分重要。...而创建一个包含两个列索引和创建两个分别包含一列索引是大不相同。 2. 索引类型 MySQL 索引类型有很多类型,能够为不同场景提供更好性能。...说明 上述限制存在于 MySQL 5.5 及以前数据库版本,未来版本可能会取消某些限制。 然而,可以看到,创建表时怎样选取索引列,以及他们排列顺序是非常重要。 4. 哈希索引 4.1....哈希索引与存储引擎 哈希索引是 MEMORY 存储引擎默认索引方式,MEMORY 引擎同时也支持 B-Tree 索引,目前,在 MySQL ,只有 MEMORY 引擎显式支持哈希索引。...PostgreSQL PostGIS 对 GIS 支持很好。 6. 全文索引 全文索引查找是文本关键词,而不是比较索引值,类似于搜索引擎。

    74520

    mysql索引有哪几种_MySQL索引数据结构

    因此,应该只为那些最经常出现在查询条件(wherecolumn=)或排序条件(orderbycolumn)数据列创建索引。...5、复合索引 mysql索引可以覆盖多个数据列,如像index(columna,columnb)索引。这种索引特点是mysql可以有选择地使用一个这样索引。...6、索引长度 在为char和varchar类型数据列定义mysql索引时,可以把mysql索引长度限制为一个给定字符个数(这个数字必须小于这个字段所允许最大字符个数)。...在绝大多数应用里,数据库字符串数据大都以各种各样名字为主,把索引长度设置为10~15个字符已经足以把搜索范围缩小到很少几条数据记录了。...mysql索引类型区别分析 mysql索引类型与优缺点 mysql索引优化注意问题 mysql索引优化实例解析 mysql索引优化应用实例 Mysql索引分类与优化 MySql索引优化注意要点 Mysql

    1.2K10

    导致MySQL索引失效几种常见写法

    最近一直忙着处理原来老项目遗留一些SQL优化问题,由于当初表设计以及字段设计问题,随着业务增长,出现了大量慢SQL,导致MySQLCPU资源飙升,基于此,给大家简单分享下这些比较使用易于学习和使用经验...再说之前我先根据我最近经验说下我对索引看法,我觉得并不是所以表都需要去建立索引,对于一些业务数据,可能量比较大了,查询数据已经有了一点压力,那么最简单、快速办法就是建立合适索引,但是有些业务可能表里就没多少数据...啥叫最左匹配原则,就是对于符合索引来说,它一个索引顺序是从左往右依次进行比较,像第二个查询语句,name走索引,接下来回去找age,结果条件没有age那么后面的sex也将不走索引。 ?...name、sex、age,你现在查询顺序是sex、age、name,这肯定不走索引啊,你要是自己没测试过,也有这种不成熟想法,那跟我一样还是太年轻了,它其实跟顺序是没有任何关系,因为mysql底层会帮我们做一个优化...关于符合索引导致索引失效情况能说目前就这两种,其实我觉得对于符合索引来说,重要是如何建立高效索引,千万不能说我用到那个字段我就去建立一个单独索引,不是就可以全局用了嘛。

    1.3K20

    聊聊PostgreSQL几种索引类型

    索引是增强数据库性能利器,在检索某些特定行时候效率会有很大提升,postgresql索引类型丰富,每种索引有着不同应用场景,下面简单介绍一下。...在PostgreSQL当前支持索引类型,只有B-tree可以产生排序输出,当ORDER BY与LIMIT n组合:显式排序将必须处理所有数据以识别前n行,但如果存在与ORDER BY匹配索引,则可以直接检索前...PostgreSQL支持对表中部分数据建立索引,使用部分索引一个主要原因是避免索引常见值。...由于搜索常见值查询将不会使用索引,所以根本没有必要在索引中保留这些行,这样可以直接排除掉一部分数据,减少了索引大小,性能更快。...PostgreSQL支持仅索引扫描,当要查询目标列都在索引时,直接使用索引键值进行返回,不需要回表操作。 技术永无止境,加油吧。 Catch.jpg

    5.2K20

    MySQL索引优缺点、分类和使用操作详解

    索引用于快速找出在某个列中有一特定值行,不使用索引MySQL必须从第一条记录开始读完整个表,直到找出相关行,表越大,查询数据所花费时间就越多,如果表查询列有一个索引MySQL能够快速到达一个位置去搜索数据文件...一个表很够创建多个索引,这些索引度会被存放到一个索引文件(专门存放索引地方) 三、索引分类 注意:索引是在存储引擎实现,也就是说不同存储引擎,会使用不同索引 MyISAM和InnoDB存储引擎...1.1.1、普通索引MySQL基本索引类型,没有什么限制,允许在定义索引插入重复值和空值,纯粹为了查询数据更快一点。...注意,key_len值可以告诉你在联合索引mysql会真正使用了哪些索引。这里就使用了1个索引,所以为1, ref:给出关联关系另一个数据表数据列名字。...为什么要有索引? 这个很重要,需要自己理解一下,不懂就看顶部讲解 2、索引分类 3、索引操作 给表创建索引,添加索引,删除索引,删除索引

    74410

    Mysql索引

    Mysql索引类型 Primary key/主键索引,Innodb 又叫聚簇索引,InnoDB存储引擎表会存在主键(唯一非null),如果建表时候没有指定主键,则会使用第一非空唯一索引作为聚集索引...索引分类 Btree索引(B+tree,B-tree) 哈希索引 full-index(全文索引) Rtree 从应用层次上来分 普通索引 唯一索引 组合索引 主键索引 空间索引 从记录和索引排列顺序上来分...图中每个节点称为页,页就是我们上面说磁盘块,在MySQL数据读取基本单位是页,所以我们这里叫做页更符合MySQL索引底层数据结构。...聚簇索引和非聚簇索引MysqlB+树索引按照存储方式不同分为聚集索引和非聚集索引。...相关命令 Mysql5.7主从复制配置 Mysql通过binlog恢复数据 Mysql之binlog三种模式 Mysqlbinlog入门介绍

    3.3K20

    MySQL高手练成之路-索引分类

    实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表记录,所以索引列也是要占用空间MySQL索引分类 聚簇索引和非聚簇索引 聚簇索引并不是一种单独索引类型,而是一种数据存储方式。...适合创建索引场景 在MySQL实际应用,有一些使用场景适合在数据表创建索引,总结如下: 1.必须为数据表主键和外键添加索引。 2.数据表数据达到一定量级时,应当为数据表适当添加索引。...创建单列索引 单列索引表示在创建索引,只包含数据表单个字段或列。MySQL,支持在一张数据表创建多个单列索引。...创建复合索引 即一个索引包含多个列,MySQL,同样支持在一张数据表创建多个组合索引。在使用组合索引查询数据时,MySQL支持最左匹配原则。...创建空间索引 MySQL 支持在GEOMETRY数据类型字段上创建空间索引。例如,创建名称为t8数据表,并为t8数据表t_location字段创建空间索引

    45321

    这样总结MySQL索引分类才好

    文章简介 本文将大致介绍索引类型、InnoDB索引分类、如何创建索引、使用索引注意事项等几个方面记录索引。...问题引入 详细很多程序员在面试时候,都会被问到这样一个问题“MySQL索引都有哪些”?...一般在提交到索引时候,都会提及到二叉树、平衡二叉树、B Tree这几种数据结构,至于为什么会提及呢?主要是B+Tree是根据这几种数据结构演变过来,因为前面的数据结构存在这种种不足。...这里简单提及一下几种数据结构,后面单独出一篇文章来总结这几种数据结构。 索引分类 从 B+Tree数据结构分类,InnoDB索引类型分为聚集索引和非聚集索引。...不能使用在order by情况。 不能使用在group by情况。 不能使用在覆盖索引情况。 创建索引长度,最好是根据column_name对应长度来确定。

    49060

    MySQL几种

    MySQL(InnoDB引擎)在实现不同级别的隔离度时,核心技术之一就是使用不同粒度锁。...假设意向锁是一种行锁(或不存在意向锁),事务A对表某一数据行加排他锁且未提交,当事务B欲对该表加表锁时,数据库需逐行判断表是否存在被锁定数据行,执行效率很低;但当意向锁作为表锁出现时,只需检查一次表是否存在意向锁即可判断当前有无锁定数据行...在InnoDB,意向锁是引擎自动维护,用户不能对其进行操作,这种锁可看作引擎对加锁性能优化。...另外,需要注意是,InnoDB行锁是实现在索引项上,所以只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。...不兼容 不兼容 表级排他 不兼容 不兼容 不兼容 不兼容 不兼容 自增锁 兼容 兼容 不兼容 不兼容 不兼容 以上是对MySQL数据库锁类型简单介绍,对于锁机制想要有更深了解读者可参考《MySQL

    9210

    MySQL索引篇,索引优缺点,分类及设计原则

    索引在数据库作用是快速找出某个列中一个特定值行,不使用索引的话,MySQL必须从第一条记录遍历到相关行,表越大,花费时间越多,但是如果有索引,就能快速到达某个位置去搜索数据文件,索引对于优化数据库查询速度有着不可替代作用...,本文主要给大家讲解一下MySQL数据库索引优缺点,分类以及设计原则。...索引缺点 1.创建索引和维护索引需要时间,而且数据量越大时间越长。 2.创建索引需要占据磁盘空间,如果有大量索引,可能比数据文件更快达到最大文件尺寸。...3.当对表数据进行增加,修改,删除时候,索引也要同时进行维护,降低了数据维护速度。 ? 索引分类 1.普通索引(Normal):基本索引类型,允许在定义索引列里插入空值或重复值。...3.单列索引:只包含一个列索引,一个表可以有多个。 4.组合索引:包含多个列索引,查询条件包含这些列最左边字段时候,索引就会被引用,遵循最左缀原则。

    2K20

    Mysql数据库常见索引几种

    数据库索引问题在面试基本上是100%会被问到,下面我们一起来看一下吧! 索引类型 Mysql常见索引有主键索引、普通索引、全文索引、唯一索引。... drop index 索引名; 3、查询索引(以主键索引为例) show keys from table_name; 使用索引优点 提高数据搜索速度加快表与表之间连接速度在信息检索过程,若使用分组及排序子句进行时...在我们需要修改表数据时,索引还需要进行动态维护,所以对数据库维护带来了一定麻烦。 索引介绍 唯一索引:在创建唯一索引时要不能给具有相同索引值。...主键索引:在我们给一个字段设置主键时候,它就会自动创建主键索引,用来确保每一个值都是唯一。 聚集索引:我们在表添加数据顺序,与我们创建索引键值相同,而且一个表只能有一个聚集索引。...普通索引:它结构主要以B+树和哈希索引为主,主要是对数据表数据进行精确查找。 全文索引:它作用是搜索数据表字段是不是包含我们搜索关键字,就像搜索引模糊查询。

    3.6K10

    列举MJExtension方法

    https://blog.csdn.net/u010105969/article/details/51252263 在使用此第三方时候遇到一个问题,就是在字典key和OC关键字一致时候怎么处理...写的话可以重写方法: - (void)setValue:(id)value forUndefinedKey:(NSString *)key {     if ([key isEqualToString:@"数组...key"]) {         _非关键字属性名 = value;     } } 而我们利用了MJExtension,则需要在模型.m文件实现一个方法: + (NSDictionary...*)replacedKeyFromPropertyName { return @{@“非关键字属性名” : @“数组key”}; } // 实现这个方法,就会自动把数组字典转换成对应模型...dictArray = [User keyValuesArrayWithObjectArray:userArray]; //模型转字典 param.keyValues 最近发现3.0.13版本该类使用更简洁

    1.2K20

    MySQL 索引

    叶子节点除了包含键值以外,每个叶子节点中索引还包含一个书签。该书签用来告诉 InnoDB 存储引擎哪里可以找到与索引相对应行数据。...同样是基于索引查询,查询结果也是相同,那为什么查询效率不一样呢?举个例子来说明下,假设有数据表 T,表包含三个字段 id、emp_no 和 gender,id 为主键,并且在 k 上有索引。...表 R1~R5 值分别为(3, 300, "M")、(5, 500, "M")、(8, 800, "F")、(13, 1300, "F") 和 (21, 2100, "M"),聚簇索引和非聚簇索引索引示意图如下...也就是说,基于非聚簇索引查询需要多扫描一棵索引树。因此,我们在应用应该尽量使用主键查询。 覆盖索引 上一节讲到,当使用非聚簇索引查询数据时,由于查询结果需要数据只在主键索引上有,所以不得不回表。...最左前缀原则 从前面的例子,可以看出索引存在确实大大提高了查询效率,那是不是需要为每个查询都设计一个索引,答案是大可不必。

    1.5K30

    MySQL索引分类及相关概念辨析

    索引分类 从数据结构角度可分为B+树索引、哈希索引、以及全文(FULLTEXT)索引(现在MyISAM和InnoDB引擎都支持)和R-Tree索引(用于对GIS数据类型创建SPATIAL索引); 从物理存储角度可分为聚集索引...从数据结构角度 B+树索引结构 MySQL采用B+Tree作为索引和数据存储结构,如下图1所示,在这棵树,非叶子节点只存储索引,而且索引是冗余,非叶子节点中两个索引中间存储是下一个数据页地址。...MySQL默认使用主键建立索引树,如果没有主键会看是否有可以唯一标识一个行记录列,有则使用该列建立索引树,没有的话MySQL内部会创建一个隐含列类似于rowid来建立索引树。...回表 前面我们提到聚集索引是把索引和数据一块维护在B+Tree,当然我们也可以建立辅助索引(非聚集索引),而辅助索引存在并不影响数据在聚集索引组织,且每张表上可以有多个辅助索引。...按照《阿里最新Java编程规范泰山版》《(二) 索引规约》说法: 建议前缀长度为20区分度高达90%,我认为这不是绝对,因为通过计算得出数据才会更具说服力。 那在实际工作具体如何做呢?

    42840

    MySQL数据库,详解索引分类

    索引分类 分为聚集索引和⾮聚集索引。...聚集索引 每个表有且⼀定会有⼀个聚集索引,整个表数据存储在聚集索引mysql索引是采⽤B+树结构保存在⽂件,叶⼦节点存储主键值以及对应记录数据,⾮叶⼦节点不存 储记录数据,只存储主键值。...当表未指定主键时,mysql内部会⾃动给每条记录添加⼀个隐藏rowid字段(默认4个字节)作为主键,⽤rowid构建聚集索引。 聚集索引mysql又叫主键索引。...mysql⾮聚集索引分为 单列索引 即⼀个索引只包含⼀个列。 多列索引(⼜称复合索引) 即⼀个索引包含多个列。 唯⼀索引 索引值必须唯⼀,允许有⼀个空值。...innodb我们⽤最多,我们只看图中左边innodb数据检索过程: 如果需要查询id=14数据,只需要在左边主键索引检索就可以了。

    1.2K10
    领券