mysql的索引

目录

1.谈谈我对索引的理解

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

简单来说:

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

2.索引的优缺点

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

3.索引的语法

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

普通索引:

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

唯一索引:

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

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

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

全文索引:

sql 复制代码
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 特性)
锁机制 表级锁,并发性能差 支持行级锁(默认),并发性能好
外键支持 不支持外键 支持外键,可维护表间数据完整性
数据存储 数据与索引分开存储,统计行数快 数据与索引结合(聚簇索引),主键查询快
崩溃恢复 恢复能力差,易丢数据 依赖日志,恢复能力强
适用场景 简单查询、统计类场景 需事务、高并发、有外键关联的场景
相关推荐
ShuiShenHuoLe18 分钟前
maven配置阿里源
java·数据库·maven
码农爱学习26 分钟前
C语言结构体对齐是怎么计算
java·c语言·数据库
小杨同学4934 分钟前
C 语言实战:堆内存存储字符串 + 多种递归方案计算字符串长度
数据库·后端·算法
小码编匠36 分钟前
完美替代 Navicat,一款开源免费、集成了 AIGC 能力的多数据库客户端工具!
数据库·后端·aigc
linuxxx11036 分钟前
正则匹配应用小案例
数据库·正则表达式
末日汐1 小时前
磁盘与文件系统
linux·运维·数据库
win x1 小时前
Redis集群
java·数据库·redis
qq_12498707531 小时前
基于Spring Boot的“味蕾探索”线上零食购物平台的设计与实现(源码+论文+部署+安装)
java·前端·数据库·spring boot·后端·小程序
江上月5131 小时前
JMeter中级指南:从数据提取到断言校验全流程掌握
java·前端·数据库
晨旭缘1 小时前
零基础后端入门:JDK21 + PostgreSQL+Java项目
java·数据库·postgresql