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 特性)
锁机制 表级锁,并发性能差 支持行级锁(默认),并发性能好
外键支持 不支持外键 支持外键,可维护表间数据完整性
数据存储 数据与索引分开存储,统计行数快 数据与索引结合(聚簇索引),主键查询快
崩溃恢复 恢复能力差,易丢数据 依赖日志,恢复能力强
适用场景 简单查询、统计类场景 需事务、高并发、有外键关联的场景
相关推荐
前端小臻4 分钟前
MySQL 错误 1005 (errno: 150) 深度解析与解决方案
数据库·mysql
魔镜前的帅比7 分钟前
向量数据库原理
数据库·人工智能
Dev7z8 分钟前
在MySQL里创建数据库
android·数据库·mysql
Leon-Ning Liu28 分钟前
19C Oracle 集群(RAC)软件 与数据库软件 PSU 补丁部署流程
数据库·oracle
invicinble38 分钟前
mysql建立存数据的表(一)
android·数据库·mysql
清风66666639 分钟前
基于单片机的8路抢答器设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
点灯小铭1 小时前
基于单片机的智能污水有害气体电子鼻检测系统
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
spencer_tseng1 小时前
MySQL backup.bat
mysql
Zsh-cs2 小时前
Spring
java·数据库·spring
曹牧2 小时前
Oracle:Replace
数据库·oracle