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 特性)
锁机制 表级锁,并发性能差 支持行级锁(默认),并发性能好
外键支持 不支持外键 支持外键,可维护表间数据完整性
数据存储 数据与索引分开存储,统计行数快 数据与索引结合(聚簇索引),主键查询快
崩溃恢复 恢复能力差,易丢数据 依赖日志,恢复能力强
适用场景 简单查询、统计类场景 需事务、高并发、有外键关联的场景
相关推荐
万邦科技Lafite2 小时前
京东按图搜索京东商品(拍立淘) API (.jd.item_search_img)快速抓取数据
开发语言·前端·数据库·python·电商开放平台·京东开放平台
金仓拾光集3 小时前
__金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
数据库·mongodb·数据库平替用金仓·金仓数据库
北邮-吴怀玉3 小时前
6.1.2.2 大数据方法论与实践指南-离线任务SQL 任务开发规范
大数据·数据库·sql
流烟默3 小时前
MongoDB索引创建语法分析
数据库·mongodb
金仓拾光集3 小时前
__国产化转型实战:制造业供应链物流系统从MongoDB至金仓数据库迁移全指南__
数据库·mongodb·数据库平替用金仓·金仓数据库
初学者_xuan3 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-Redis数据库基础
运维·数据库·自动化
小马哥编程3 小时前
【软考架构】案例分析:MongoDB 如何存储非结构化数据以及其矢量化存储的优点。
数据库·mongodb·架构
默 语3 小时前
MySQL中的数据去重,该用DISTINCT还是GROUP BY?
java·数据库·mysql·distinct·group by·1024程序员节·数据去重
爱隐身的官人4 小时前
Windows配置解压版MySQL5(免安装)
windows·mysql
哲Zheᗜe༘4 小时前
了解学习Redis主从复制
数据库·redis·学习