首页 程序笔记 MySQL SQL调优之索引

MySQL SQL调优之索引

本篇记录MySQL的索引知识学习笔记,也方便自己以后查找复习

一、索引的概念
MySQL官方给出的索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构。所以说索引就是排好序的快速查找数据结构

二、索引分类
MySQL的索引可以分为几种:

单值索引:单值索引就是只包含一个列的索引
唯一索引:唯一索引要求索引列的必须是唯一的,比如说主键或者unique索引,但是还是允许空值
复合索引:复合索引就是包含多个列组成的索引
三、索引用法
创建索引
create [unique] index indexName on tableName(columnName(length));
比如给dept表创建索引idx_dept_id
create idx_dept_id on dept(id);
修改索引
ps:修改索引也可以用于新增索引
语法:

alter tablename add [unique] index indexname on columnName(length);
删除索引
drop index indexname on tablename;
查看索引
show index from tablename ;
如果要显示换行可以加上\G,不过就不能加上分号
show index from tablename \G
附录:
来自尚硅谷老师总结的新增索引的方法:
# 添加一个主键,主键是唯一的,不能为Null
alter table tablename add PRIMARY KEY(columnName);
#创建唯一索引,要求索引唯一,不过允允许空值
alter table tablename add unique index indexname on(columnName);
# 创建普通的索引,索引数据可以不唯一
alter table tablename add index indexname on(columnName);
# 指定索引为FullText,用于全文索引
alter table tablename add FULLTEXT indexname on(columnName);
四 、索引架构简介
MySQL的索引结构可以分为:

BTree索引
Hash索引
full-text全文索引
R-Tree索引

从图可以看出BTree索引的结构其实就是一棵B+树,并不一定是二叉树,也有可能是一棵多叉树,MySQL也是分为段区块这种结构的,如图,浅蓝色部分就是一个磁盘块,蓝色部分表示数据项,而黄色部分表示指针

假如我要查找29这个值,就是遍历下来,分别查找磁盘块1、磁盘块3、磁盘块8,根据指针查找下来,速度非常快,假如有几百万数据的话,能走索引的情况,是非常快的,性能对比可想而知

注意:只有叶子节点(最下面的节点)是存储要查找的数据的,非叶子节点存储的数据只是用于指针索引的数据项而已

五、索引适用的情况
1、频繁用于查询的条件适合建立索引
2、主键默认要加上Primary索引
3、和其它表有外键关系的列建立索引
4、where条件后面的条件列可以建上索引
5、用于排序order by的列可以加上索引
6、用于分组group by的列可以加上索引
注意:需要经常修改的列不适合建立索引,因为更新数据的同时也会重新构建索引,比较耗性能;在高并发的情况,更倾向于建立组合索引,因为一般来说,查询很少有一个条件,一般是多个条件,复合索引比较适合

六、索引不适用的情况
1、需要经常增删改的表
2、表的记录很少的情况,加了索引效果不明显
3、如果某个数据列包含很多重复的数据,比如用户信息表的性别这个列,一般只有两种情况,所以加了索引,是没有太大的实际效果的
注意:索引应该加在经常查询或者排序的列,数据重复而且分布很平均的情况,是不适合加索引的

站心网

本篇记录MySQL的索引知识学习笔记,也方便自己以后查找复习一、索引的概念MySQL官方给出的索引定义:索引(I..

为您推荐

服务器安装数据库MySQL8.0版本,打包导入到MySQL5.6失败的结局方式

最近数据库升级为mysql8.0,在使用过程中发现一些问题,首先mysql8.0有很多新特性,对服务器配置要求较高,所有就考虑把数据库版本切换到MySQL5.6,经过多出测试处理发现在8.0数据库打包的数据导入到5.6总是报错,或..

MySQL查询建表规范

因为之前一直再查找一些比较好的数据库规范,以方便在开发时连接 MySQL 进行查询/建表的时候,能根据规范来执行,达到提高 查询速度 / 执行 SQL 的性能 和提升 MySQL 的整体性能, 这里主要是存放一些比较好的一些数..

必须掌握的MySQL优化指南(2)

4|0表分区MySQL 在 5.1 版引入的分区是一种简单的水平拆分,用户需要在建表的时候加上分区参数,对应用是透明的无需修改代码。对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实..

mysql分表简单介绍

一、Mysql分表的原因1、当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会停在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。2、mysql中有一种机制是表锁定..

MySQL创建用户与授权

一, 创建用户: 命令:CREATE USER'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, ..

必须掌握的MySQL优化指南(1)

1.单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度。一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时..

MySQL查看、修改字符集及Collation

前言在使用MySQL的过程中,可能会出现初始设计使用的字符集或Collation不符合当前需求的情况。如使用utf8的表(MySQL中的utf8即utf8mb3)要支持emoji,而utf8mb3不支持emoji(emoji需要4个字节,而utf8mb3最长只支持..

MySQL批量插入的分析

1、背景我们在工作中基本都会碰到批量插入数据到DB的情况,这个时候我们就需要根据不同的情况选择不同的策略。只要了解sql,就应该知道,向table中插入数据的命令,至少有insert和replace这两种,使用哪一种命令,和..

MySQL 5.x和MySQL 8.x数据库的区别

MySQL 是开源关系型数据库的代表,广泛应用于不同规模的 Web 和企业应用中。从 MySQL 5.x 到 MySQL 8.x 的升级带来了大量功能改进和性能提升。为了帮助大家更直观地理解两者的区别,本文将通过详细介绍并结合实际的 ..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

数据库系列:MySQL引擎MyISAM和InnoDB的比较

1 比较和分析MyISAM和InnoDB是两种不同的数据库存储引擎,它们在数据存储结构、事务支持、锁的支持、外键支持、主键观念、性能和优化方式等方面都存在明显的差异。数据存储结构:MyISAM在磁盘上存储了三个文件,包括..

.NET EF连接MySQL数据库

.NET EF是Microsoft提供的ORM框架,可以简化.NET程序员与数据库的交互。要使用EF连接MySQL数据库,需要安装以下NuGet包:Microsoft.EntityFrameworkCore.MySqlPomelo.EntityFrameworkCore.MySql安装完成后,就可以配..

Oracle序列 索引 同义词

一、Oracle序列 1.序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 2.CREATE SEQUENCE 语句 CREATE SEQUENCE sequence [INCREM..

如何在 Debian/Ubuntu 上安装 MySQL 8.1

数据库几乎无处不在涉及数据的地方。它们在存储和管理数据方面发挥着关键作用。数据库可以定义为以电子方式存储在计算机系统中的数据的系统集合。数据库通常由数据库管理系统(DBMS)控制。当数据、DMBS 和所有相关..

不建议在Docker中运行MySQL

在Docker中运行MySQL是有一些潜在问题和挑战的,主要包括以下几个方面:数据持久化:Docker容器是临时的,当容器停止或删除后,容器内的数据将会丢失。因此,如果在容器中运行MySQL,需要特别注意数据的持久化。可以..

PostgreSQL和MySQL怎么选?

2023年Stack Overflow 调查显示,Postgres 已经取代 MySQL 成为第一名,成为最受欢迎的数据库。虽然这是国外统计,在中国应该还是MySQL更有广泛度,但足以说明问题,PostgreSQL的市场占有率越来越高了。选择 Postgre..

MySQL索引失效原因

MySQL索引在以下情况下可能会失效:1、使用不等于(!=)操作符在查询条件中使用不等于操作符可能会导致索引失效,因为不等于操作符需要对全表进行扫描。2、使用IS NULL或IS NOT NULL在查询条件中使用IS NULL或IS NOT N..

MySQL分页查询

MySQL分页查询的工作原理主要是通过使用LIMIT和OFFSET关键字来实现。LIMIT子句用于限制查询结果的数量,而OFFSET子句用于指定查询结果的起始位置。例如,如果我们想要查询一个表中的前10条数据,可以使用以下SQL语句..

MySQL PolarDB MongoDB TiDB ClickHouse数据库横向对比

这四种数据库系统(MySQL PolarDB、MongoDB、TiDB、ClickHouse)在不同方面有着不同的特点和适用场景。让我们对它们进行横向比较:MySQL PolarDB类型: 关系型数据库特点:基于 MySQL 构建,具备 MySQL 的特性,但是具..

MySQL和SQLServer哪个性能更好?

MySQL 和 Microsoft SQL Server 是两种不同的关系型数据库管理系统(RDBMS),它们在性能方面的比较并不简单,因为性能取决于多个因素,包括硬件、配置、查询优化、索引设计等。下面是一些一般性的观点,但请注意这..

发表回复

返回顶部