mysql的索引

发布于:2025-09-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

1.谈谈我对索引的理解

- 索引是一种用于快速查询和检索数据的数据库存储结构,保存了数据库指定字段的数据位置,类似图书目录的作用;
- MySQL 中常见的索引存储结构有:B+Tree 和 Hash 。
- 索引的作用是用于提升数据库的查询性能,如果没有索引,数据库的查询会进行全表搜索,这样会消耗时间,造成大量的磁盘IO操作;如果建立索引,则通过索引中所保存的数据位置,快速找到表中的对应记录;
- 索引的种类,按照逻辑区分包括:主键索引、唯一索引、普通索引、全文索引。按照实际使用字段区分包括:单列索引和组合索引;

简单来说:

索引是提升数据库查询效率的存储结构,像图书目录。MySQL常用B+Tree、Hash结构。它能避免全表扫描,通过存储数据位置快速查记录。按逻辑分主键、唯一、普通、全文索引;按字段分单列、组合索引。

2.索引的优缺点

优点:
使用索引可以加快数据的检索速度,减少数据库需要扫描的数据行数,这也是创建索引的最主要的原因。
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
缺点:
创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
索引需要使用物理文件存储,也会耗费一定空间。
大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量比较小,那么使用索引也不一定能够带来很大提升。

3.索引的语法

alter table 表名 add index 索引名(字段名);

普通索引:

在 tb_student 表中的 id 字段上建立名为 index_id 的索引。
- create index  index_id on tb_student(id);
- alter tb_student add index index_id(id);

唯一索引:

1. 建立表的时候字段上加:
2. create unique index index_id on tb_student(id);
3. alter table tb_student add unique (id);

主键索引:(一张表只有一个主键索引)

1. 建立表的时候加CREATE TABLE tb_student (id INT PRIMARY KEY AUTO_INCREMENT, ...); 
2. alter table tb_student add primary key(id);

全文索引:

1.建表的时候加(WITH PARSER ngram 是一个整体配置,用于指定全文索引使用 ngram 分词器)
		create table wenzhang(
    wid int PRIMARY KEY auto_increment,
    title varchar(20),  
    content text, 
    zuozhe varchar(20), 
    FULLTEXT(title,content,zuozhe) with parser ngram
);
2.create fulltext index  ft_idx_introduction on tb_student(introduction);
3.alter table tb_student add fulltext index 索引名 (introduction);

联合索引:

alter table 表名 add index index_name(‘column1’,‘column2’,‘column3’);

注意:

全文索引主要用来查找文本中的关键字,只能在 CHAR 、VARCHAR 或 TEXT 类型的列上创建。全文索引允许在索引列中插入重复值和空值。
不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。

4.Mysql有哪些索引类型?

在这里插入图片描述

5.BTree 与 B+Tree 的主要区别:

在这里插入图片描述

6.MySQL 为什么选择 B+Tree?

在这里插入图片描述

7.MyISAM 和 InnoDB 是 MySQL 中两种重要的存储引擎,主要区别?

对比项 MyISAM InnoDB
事务支持 不支持事务 支持事务(遵循 ACID 特性)
锁机制 表级锁,并发性能差 支持行级锁(默认),并发性能好
外键支持 不支持外键 支持外键,可维护表间数据完整性
数据存储 数据与索引分开存储,统计行数快 数据与索引结合(聚簇索引),主键查询快
崩溃恢复 恢复能力差,易丢数据 依赖日志,恢复能力强
适用场景 简单查询、统计类场景 需事务、高并发、有外键关联的场景

网站公告

今日签到

点亮在社区的每一天
去签到