MySQL索引

索引介绍
  • 索引是什么

索引是帮助数据库高效获取数据的数据结构,通俗讲:数据库索引好比是一本书的目录,能够加快数据库的查询速度。
索引往往是存储在磁盘上的文件中,可以存储在单独的索引文件中,也可以和数据一起存储在数据文件中。
我们通常所说的索引包括:唯一索引、组合索引、聚集索引、覆盖索引、前缀索引等,默认是B+树组织结构。

  • 索引的优势和劣势

优势
1.在检索上,可以提高数据库检索效率,降低数据库的IO成本
2.在排序上,可以通过索引降低数据库的排序成本,降低CPU消耗

劣势
1.索引会占据磁盘空间
2.索引会降低更新表的效率,每次增删改不仅要保存数据,还要保存对应的索引文件

  • 哪些情况需要创建索引:

1.主键自动建立唯一索引
2.频繁作为查询条件的字段应该创建索引
3.多表关联查询中关联字段应该创建索引,on两边都要创建索引
4.查询中排序的字段应该创建索引
5.频繁查找的字段应该创建覆盖索引
6.查询中统计或分组的字段应该创建索引

  • 哪些情况不需要创建索引:

1.表记录很少
2.经常要进行增删改操作的表
3.频繁更新的字段‘
4.where条件里使用不高的字段

  • 索引的分类

1.单列索引

单列索引包括:普通索引、唯一索引、主键索引
a.普通索引:MySQL中基本的索引类型,没有什么限制,可以在定义的索引列中插入null值和重复值。
b.唯一索引:索引中的列的值必须是唯一的,但允许是null值。
c.主键索引:是一种特殊的唯一索引,不允许有null值。

2.组合索引
由表中多个字段组合创建的索引,一般情况下建议使用组合索引替代单列索引(除了主键索引)

3.全文索引
只有在MyISAM引擎和InnoDB引擎上使用,且只能在char、varchar、text类型字段上使用全文索引。

索引的使用

1.创建索引

单列索引之创建普通索引:

create index index_name on table_name(column);
alter table table_name add index index_name (column);

单列索引之创建唯一索引:

create unique index index_name on table_name(column);
alter table table_name add unique index index_name(column);

单列索引之创建全文索引

create fulltext index index_name on table_name(column);
alter table table_name add fulltext index index_name(column);

创建组合索引:

alter table table_name add index index_name(col_1,col_2);

2.删除索引

drop index index_name on table_name;

3.查看索引

show index from table_name;
索引原理分析

索引的存储结构:
索引是在存储引擎中实现的,不同的存储引擎会使用不同的索引
MyISAM和InnoDB存储引擎只支持B+tree索引。
Memory和heap存储引擎支持hash索引和Btree索引。

B树和B+树最大的区别在于是非叶子节点是否存储数据:
B树叶子节点和非叶子节点都会存储数据
B+树只有在叶子节点存储数据,而且存储的都在一行上,这些数据都是有指针指向的(有序的)

  • MyISAM非聚集索引

B+树的叶子节点只会存储数据行的指针,也就是数据和索引不在一起
非聚集索引包含主键索引和辅助索引都会存储指针的值

主键索引(Primary Key):
其中Col1为主键,图为一个MyISAM主索引的示意图,可以看出MyISAM的索引文件仅仅保存数据记录的地址。

通过索引树找到对应的索引,然后通过索引中存储的记录指针找到数据文件对应的记录。

辅助索引(Secondary Key):
辅助索引在结构上与主键索引没有任何区别,只是主键索引要求Key是唯一的,而辅助索引中Key可以重复。

  • InnoDB聚集索引

主键索引的叶子节点会存储数据行,数据和索引是在一起的。
辅助索引只会存储主键的值。
如果没有主键则使用唯一索引创建聚集索引,如果没有唯一索引,MySQL会按照一定的规则创建聚集索引。

主键索引(Primary Key):
InnoDB要求表必须有主键,如果没有显式指定,则MySQL会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL会自动会InnoDB表生成一个隐含字段作为主键,类型为长整数型。

下图为InnoDB的主键索引图,叶子节点包含了完整的数据记录,

辅助索引(Secondary Key):
InnoDB辅助索引数据域存储的是相应记录主键的值,即InnoDB所有的辅助索引都引用主键作为data域。

a.多用组合索引
聚集索引的实现方式使得按照主键索引的方式十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后从主索引中检索获得记录。

例如:
select * from user where name = ‘Alice’ 需要进行回表查询
selcet id,name from user where name= ‘Alice’ 则不需要进行回表查询,在辅助索引树上即可查询到。

b.不建议使用过长的字段作为主键
MySQL创建组合索引的规则是首先对组合索引的第一个字段进行排序,在第一个字段排序的基础上对第二个字段进行排序,类如组合索引(name,cid),相当于实现了order by name,cid。

为了节省MySQL

c.尽量在InnoDB表上使用自增字段作为表的主键

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
MathorCup高校数学建模挑战赛是一项旨在提升学生数学应用、创新和团队协作能力的年度竞赛。参赛团队需在规定时间内解决实际问题,运用数学建模方法进行分析并提出解决方案。2021年第十一届比赛的D题就是一个典型例子。 MATLAB是解决这类问题的常用工具。它是一款强大的数值计算和编程软件,广泛应用于数学建模、数据分析和科学计算。MATLAB拥有丰富的函数库,涵盖线性代数、统计分析、优化算法、信号处理等多种数学操作,方便参赛者构建模型和实现算法。 在提供的文件列表中,有几个关键文件: d题论文(1).docx:这可能是参赛队伍对D题的解答报告,详细记录了他们对问题的理解、建模过程、求解方法和结果分析。 D_1.m、ratio.m、importfile.m、Untitled.m、changf.m、pailiezuhe.m、huitu.m:这些是MATLAB源代码文件,每个文件可能对应一个特定的计算步骤或功能。例如: D_1.m 可能是主要的建模代码; ratio.m 可能用于计算某种比例或比率; importfile.m 可能用于导入数据; Untitled.m 可能是未命名的脚本,包含临时或测试代码; changf.m 可能涉及函数变换; pailiezuhe.m 可能与矩阵的排列组合相关; huitu.m 可能用于绘制回路图或流程图。 matlab111.mat:这是一个MATLAB数据文件,存储了变量或矩阵等数据,可能用于后续计算或分析。 D-date.mat:这个文件可能包含与D题相关的特定日期数据,或是模拟过程中用到的时间序列数据。 从这些文件可以推测,参赛队伍可能利用MATLAB完成了数据预处理、模型构建、数值模拟和结果可视化等一系列工作。然而,具体的建模细节和解决方案需要查看解压后的文件内容才能深入了解。 在数学建模过程中,团队需深入理解问题本质,选择合适的数学模
MySQL索引是一种数据结构,可以帮助MySQL快速定位和访问表中的数据。使用索引可以提高查询效率,降低数据库的负载。下面是MySQL索引的一些基本概念和使用方法: 1. 索引类型 MySQL支持多种类型的索引,包括B树索引、哈希索引、全文索引等。其中,B树索引是最常用的一种,也是默认的索引类型。B树索引可以用于精确匹配和范围查询,而哈希索引主要用于等值查询,全文索引则用于文本检索。 2. 索引创建 可以在创建表时指定索引,例如: ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), INDEX idx_email (email) ); ``` 也可以在已有的表上添加索引,例如: ``` ALTER TABLE users ADD INDEX idx_name (name); ``` 3. 索引使用 查询语句中可以使用WHERE子句和ORDER BY子句来利用索引,例如: ``` SELECT * FROM users WHERE email = 'example@example.com'; SELECT * FROM users WHERE name LIKE 'John%' ORDER BY id DESC; ``` 需要注意的是,索引并不是越多越好,过多的索引会占用过多的磁盘空间并降低写操作的性能。因此,需要根据实际情况选择合适的索引。同时,还需要定期对索引进行维护,包括优化查询语句、删除不必要的索引等。 4. 索引优化 MySQL提供了一些工具来优化索引,例如EXPLAIN命令可以帮助分析查询语句的执行计划,找出慢查询和不必要的全表扫描。可以使用OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。还可以使用缓存来避免频繁的查询操作,例如使用Memcached或Redis等缓存工具。 以上就是MySQL索引的一些基本概念和使用方法,需要根据实际情况进行选择和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值