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