MySQL 基础---索引

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 索引: 主要是为了提高从表中检索数据的速度,索引分为B型树索引(BTREE)和哈希索引(HASH)。InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引,默认为前者索引MySQL支持6中索引:普通索引唯一索引全文索引单列索引多列索引空间索引以下情况适合创建索引:经常被查询的字段,即在WHERE语句中出现的字段。

索引: 主要是为了提高从表中检索数据的速度,索引分为B型树索引(BTREE)和哈希索引(HASH)。

InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引,默认为前者索引

MySQL支持6中索引:

  • 普通索引
  • 唯一索引
  • 全文索引
  • 单列索引
  • 多列索引
  • 空间索引

以下情况适合创建索引:

  • 经常被查询的字段,即在WHERE语句中出现的字段。
  • 在分组的字段,即在GROUP BY语句中出现的字段。
  • 存在依赖关系的子表和父表之间的联合查询,即主键或外键字段。
  • 设置唯一完整性约束的字段。

以下情况下,不适合创建索引:

  • 在查询中很少被使用的字段。
  • 拥有许多重复值的字段。
  1. 创建和查看普通索引
  • 校验数据库表t_dept中的索引是否被引用
#校验数据库表t_dept中的索引是否被引用
explain select * from t_dept where deptno=1\G;
  • 创建表时创建普通索引
#创建表时创建索引
create table t_dept(
         deptno int,
         dname varchar(20),
         loc varchar(40),
         index index_deptno(deptno)
);
#校验数据库表t_dept中的索引是否被引用
explain select * from t_dept where deptno=1\G;
  • 在已经存在的表上创建普通索引
#创建表
create table t_dept(
 deptno int,
 dname varchar(20),
 loc varchar(40)
);
#创建索引
create index index_deptno on t_dept (deptno);
  • 通过SQL语句ALTER TABLE创建普通索引
#创建表
 create table t_dept(
  deptno int,
  dname varchar(20),
  loc varchar(40)
 );
#添加索引
 alter table t_dept add index index_deptno(deptno);
  1. 创建和查看唯一索引
  • 创建表时创建唯一索引
create table t_dept(
         deptno int  unique,
         dname varchar(20),
         loc varchar(40),
         unique index index_deptno(deptno)
);
  • 在已经存在的表上创建唯一索引
#创建表
 create table t_dept(
  deptno int,
  dname varchar(20),
  loc varchar(40)
 );
#创建索引
 create unique index index_deptno on t_dept(deptno);
  • 通过SQL语句ALTER TABLE创建唯一索引
#创建表
  create table t_dept(
   deptno int,
   dname varchar(20),
   loc varchar(40)
  );
#添加索引
 alter table t_dept add unique index index_deptno(deptno);
  1. 创建和查看全文索引
    全文索引主要关联在数据类型CHAR、VARCHAR和TEXT的字段上。
  • 创建表时创建全文索引
 create table t_dept(
          deptno int,
          dname varchar(20),
          loc varchar(40),
          fulltext index index_loc(loc)
 )engine=MyISAM;
  • 在已经存在的表上创建全文索引
# 创建表
 create table t_dept(
          deptno int,
          dname varchar(20),
          loc varchar(40)
 )engine=myisam;
 create fulltext index index_loc on t_dept(loc);
  • 通过SQL语句ALTER TABLE创建全文索引
#创建表
create table t_dept(
           deptno int,
           dname varchar(20),
           loc varchar(40)
)engine=myisam;
#添加索引
alter table t_dept add fulltext index index_loc(loc desc);
  1. 创建和查看多列索引
  • 创建表时创建多列索引
create table t_dept(
         deptno int,
         dname varchar(20),
         loc varchar(40),
         key index_dname_loc(dname,loc)
);
  • 在已存在的表上创建多列索引
# 创建表
 create table t_dept(
          deptno int,
          dname varchar(20),
          loc varchar(40)
);
# 创建索引
create index index_dname_loc on t_dept(dname,loc);
  • 通过SQL语句ALTER TABLE创建多列索引
# 创建表
 create table t_dept(
          deptno int,
          dname varchar(20),
          loc varchar(40)
);
# 添加索引
alter table t_dept add index index_dname_loc(dname,loc);
  1. 删除索引
    drop index index_dname_loc on t_dept;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
2月前
|
存储 NoSQL 关系型数据库
为什么MySQL不使用红黑树做索引
本文详细探讨了MySQL索引机制,解释了为何添加索引能提升查询效率。索引如同数据库的“目录”,在数据量庞大时提高查询速度。文中介绍了常见索引数据结构:哈希表、有序数组和搜索树(包括二叉树、平衡二叉树、红黑树、B-树和B+树)。重点分析了B+树在MyISAM和InnoDB引擎中的应用,并讨论了聚簇索引、非聚簇索引、联合索引及最左前缀原则。最后,还介绍了LSM-Tree在高频写入场景下的优势。通过对比多种数据结构,帮助理解不同场景下的索引选择。
106 6
|
2月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
155 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
2天前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
26 7
|
17天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
22 2
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
69 3
Mysql(4)—数据库索引
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
199 1
|
2月前
|
存储 关系型数据库 MySQL
如何在MySQL中进行索引的创建和管理?
【10月更文挑战第16天】如何在MySQL中进行索引的创建和管理?
84 1
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
81 0