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 特性)
锁机制 表级锁,并发性能差 支持行级锁(默认),并发性能好
外键支持 不支持外键 支持外键,可维护表间数据完整性
数据存储 数据与索引分开存储,统计行数快 数据与索引结合(聚簇索引),主键查询快
崩溃恢复 恢复能力差,易丢数据 依赖日志,恢复能力强
适用场景 简单查询、统计类场景 需事务、高并发、有外键关联的场景
相关推荐
GBASE3 小时前
GBASE南大通用技术分享:GBase 8s数据库典型安装(命令行方式)
数据库
康惠桀3 小时前
Oracle UNDO表空间监控指南
数据库·oracle
SeaTunnel3 小时前
实测有效|用 SeaTunnel 免费实现 MySQL→Oracle 实时同步,步骤超细
数据库·mysql·oracle·开源·seatunnel·数据同步·连接器
Mr.朱鹏3 小时前
ShardingJDBC实战指南
java·jvm·数据库·spring·分库分表·shardingjdbc·shardingshere
咔咔一顿操作3 小时前
MySQL 事务管理与锁机制:解决并发场景下的数据一致性问题
java·数据库·mysql
麦兜*4 小时前
MongoDB 备份与恢复终极指南:mongodump 和 mongorestore 深度实战
java·数据库·spring boot·mongodb·spring
xhbh6665 小时前
MySQL数据导出避坑指南:如何选择正确的工具并设计安全的备份策略?
数据库·mysql·oracle·程序员·mysql导出数据库
幻奏岚音5 小时前
《数据库系统概论》第一章 初识数据库
数据库·算法·oracle
蜗牛~turbo5 小时前
金蝶云星空 调价表取历史价格
java·数据库·sql·c#·database