Mysql重点思考(上)--mysql的索引优化

news2024/11/26 2:31:18

mysql的索引优化

  • expalin关键字的用法
    • explain索引优化示例
  • type列用法
    • 执行查询的顺序
    • 类型概述
  • 索引概念
    • 索引的定义
    • 索引的分类
    • 主键&唯一区别
  • 唯一索引的创建和查询
    • 创建一个唯一索引
    • 查询一个唯一索引
  • 场景题合集
    • 唯一索引的场景题
    • 主键索引的场景题(B+树)
    • 联合索引的场景题

expalin关键字的用法

explain索引优化示例

  • 下面是一个示例,假设我们有一个简单的表 users,包含两个字段 id 和 name,并且 id 字段上有一个索引:
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

INSERT INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');

CREATE INDEX idx_id ON users (id);

  • 我们想要查询 id 为 2 的用户:
SELECT * FROM users WHERE id = 2;
  • 我们可以使用 EXPLAIN 命令来分析这个查询的执行计划:
EXPLAIN SELECT * FROM users WHERE id = 2;
  • 输出的信息
id  select_type  table  partitions  type  possible_keys  key    key_len  ref  rows  filtered  Extra
1   SIMPLE       users  NULL        const idx_id         idx_id  4        const 1     100.00    NULL

id:查询中每个 SELECT 子句的唯一标识符。如果查询中有多个子句,则每个子句都有一个唯一的标识符。这个字段并不直接影响查询的优化。
select_type:查询的类型,常见的值包括 SIMPLE、PRIMARY、DERIVED 等。SIMPLE 表示查询不包含子查询或联合查询,是最简单的查询类型。优化时通常关注于将查询转换为简单类型以提高性能。
通过分析这些字段,你可以了解查询执行情况、是否使用了索引以及查询效率。如有必要,优化查询语句和索引设计以提高性能。

type列用法

执行查询的顺序

const、eq_ref、ref、range、index、all。

类型概述

  • all:全表扫描,效率最低,应该尽量避免使用
  • index:通过完整索引扫描进行查询,效率较低,可能会导致全表扫描
  • range:通过索引范围进行查询,效率相对较低,但仍然比全表扫描要好
  • ref:使用非唯一索引进行查询,可能会返回多行结果,但效率仍然比较高
  • eq_ref:使用索引进行连接,只有一行匹配,效率较高
  • const:通过常量条件进行查询,是最理想的访问方式,通常表示数据库能够直接定位到唯一的行

索引概念

索引的定义

在一个字典中,你可以按照字母顺序快速查找单词,而不需要逐个查找。这就类似于在数据库表中使用索引来快速查找数据。字典中的字母顺序类似于索引中的排序规则,而单词类似于表中的数据。

索引的分类

  • 唯一索引

是指对一个表中的某个列创建索引,并且要求该列中的所有数据都是唯一的,也就是不能有重复的值。唯一索引可以提高查询效率、确保数据完整性,并防止重复的数据被插入到数据库中。(可有多个)。

  • 主键索引

是唯一索引的一种特殊类型。创建主键会自动创建主键索引。中的每个值是非空,唯一的。(主动对主键建立 B+树索引,以便快速定位和查找)

  • 聚簇索引(聚集索引)

按照索引的键值对表进行重排,使得数据的物理存储顺序和索引顺序一致。因此每个表只能有一个聚簇索引,且聚簇索引的键值不能包含空值。(一表只能有一个)。

  • 非聚簇索引(普通索引)

表中各行数据存放的物理顺序与键值的逻辑顺序不匹配,索引和表格数据分开存放,索引内存储的是指向对应数据所在位置的指针或行标识。聚索引比非聚索引有更快的数据访问速度。

  • 复合索引

联合索引同时考虑多个列的值,以创建一个索引结构。联合索引的作用是加快对多列组合条件的查询操作,例如在 WHERE 子句中涉及到多个列的查询条件。通过联合索引,数据库可以更快地定位到满足多个查询条件的数据行,提高查询性能。

主键&唯一区别

在这里插入图片描述

唯一索引的创建和查询

创建一个唯一索引

CREATE UNIQUE INDEX index_name ON table_name (column_name);

在这里插入图片描述

查询一个唯一索引

SELECT * FROM table_name WHERE unique_column = 'value';

场景题合集

唯一索引的场景题

假设有一个名为 users 的用户表,其中包含 id、username 和 email 等字段,现在要在 email 列上创建一个唯一索引,确保电子邮件地址的唯一性。下面是创建唯一索引并执行插入操作的 SQL 语句:

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users (email);

-- 尝试插入一条新记录,保证电子邮件地址的唯一性
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');

-- 尝试再次插入相同的电子邮件地址,会返回唯一性约束违反的错误
INSERT INTO users (username, email) VALUES ('jane_doe', 'john@example.com');

在这个示例中,创建了一个名为 idx_email 的唯一索引,然后尝试插入两条记录,第一条记录的电子邮件地址是 ‘john@example.com’,插入成功;而第二条记录尝试使用相同的电子邮件地址,但由于唯一索引的限制条件,插入操作会失败,并返回唯一性约束违反的错误。

主键索引的场景题(B+树)

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10, 2),
    stock_quantity INT
);

在这个解决方案中,我们在 products 表上创建了一个名为 product_id 的主键索引。这个主键索引将建立 B+ 树索引结构,使得在执行商品查找、浏览和购买操作时能够快速定位到目标商品。

联合索引的场景题

在这里插入图片描述

CREATE INDEX idx_user_created_at ON posts (user_id, created_at);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1558979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥备赛——矩阵读入

题目描述 如上图所示,是一道有关二维前缀和的问题,因为涉及到二维,肯定就是以矩阵的形式进行读入的。 为此,针对矩阵的读入形式进行总结,可以大致总结出两种类型如下: 二维列表推导式 n, m, k map(int…

HTML教程(详细汇总)

目录 前言: Sublime Text(收费): VS Code(免费): HBuilderX(免费): Dreamweaver(免费): Webstorm(收费): 一.网站的概念: 1.什么是网页: 2.什么是网站: 3.服务器: 总结: 二.HTML简介&#xff…

【JavaEE初阶系列】——CAS

目录 🎈什么是 CAS 📝CAS 伪代码 🎈CAS 是怎么实现的 🎈CAS 有哪些应用 🚩实现原子类 🌈伪代码实现: 🚩实现自旋锁 🌈自旋锁伪代码 🎈CAS 的 ABA 问题 &#…

黄金票据制作-新手向

黄金票据制作 文章目录 黄金票据制作0x01 前言0x02 黄金票据的制作一、靶场搭建二、收集制作信息获取域名称获取域SID值获取域用户krbtgt密码hash值 二、制作票据 0x03 验证票据有效性 0x01 前言 最近,我学习了内网渗透的相关知识,其中包括了黄金票据的…

浏览器页面缓存机制

HTTP缓存机制的核心思想是,对于已经请求过的资源,如果其在服务器上没有发生变化,那么浏览器就可以直接从本地缓存中获取这些资源,而无需再次向服务器发送请求。 强缓存 就是确定可用的缓存 浏览器和和服务器对每个缓存资源先商量一…

fread和fwirte函数

✨✨ 欢迎大家来到莉莉的博文✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 一、fread函数 ——>从文件流中读取二进制数据到ptr指向的数组 从流(二进制文件)中读取数据块 ptr:指向大小至…

基于JSP在线订花系统

基于JSP在线订花系统的设计与实现 摘要 近年来,随着人们对于生活品质的重视度日益提升,鲜花的需求量也在不断增加同时带动了鲜花电商的飞速发展和应用,平台化的鲜花交易模式也逐渐从传统的鲜花销售转型为个性化鲜花定制。同时随着鲜花速递行…

基于 RisingWave 和 ScyllaDB 构建事件驱动应用

概览 在构建事件驱动应用时,人们面临着两大挑战:1)低延迟处理大量数据;2)实现流数据的实时摄取和转换。 结合 RisingWave 的流处理功能和 ScyllaDB 的高性能 NoSQL 数据库,可为构建事件驱动应用和数据管道…

MTMT:构建比特币生态平行世界 打造铭文生态繁荣

近年来,随着铭文市场的火爆以及比特币ETF成功通过,比特币生态正经历着一场复兴,尤其是铭文市场作为新一代Web3的叙事,带来了全新的生产方式,可以预见,铭文就像流动性挖矿对于上一轮DeFi Summer的推动一样会…

KNN算法 | K近邻:KD Tree、球树、KNN数据下采样策略

目录 一. KNN算法实现方式1. 蛮力实现(brute)2. KD树(kd_tree)3. 球树(ball_tree) 二. KD Tree算法1. 构建方式2. KD Tree 查找最近邻 三. 球树(Ball Tree)1. 构建方式 四. KNN评价1. 优点2. 缺点 五. 延申1. KNN数据下采样策略策略1策略2策略3策略4 Condensed Nearest Neighbo…

Macs Fan Control Pro--精准掌控Mac风扇,优化散热新选择

Macs Fan Control Pro是一款专为Mac电脑设计的高级风扇控制工具。它具备强大的温度监测能力,可以实时监测Mac电脑各个核心组件的温度,并通过直观的界面展示给用户。同时,用户可以根据个人需求自定义风扇速度,或者选择预设的自动风…

蓝桥杯算法题-图形排版

题目描述 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi。   假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照图片顺序,在宽度 M 以内&…

LabVIEW转动设备故障诊断系统

LabVIEW转动设备故障诊断系统 随着工业自动化技术的不断进步,转动设备在电力、化工、船舶等多个行业中扮演着越来越重要的角色。然而,这些设备在长期运行过程中难免会出现故障,如果不能及时诊断和处理,将会导致生产效率下降&…

【JavaSE】一维数组和二维数组详解

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 一维数组…

排序——非基于比较的排序

本专栏和大家分享关于排序的算法,其中有插入排(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排)、交换排序(冒泡排序和快速排序)、归并排序以及其他非基于比较的排序 本文与大家分享非基于比较的排…

透视未来安全:PIR技术引领数据隐私新时代

1.隐语实现PIR总体介绍 隐语实现的Private Information Retrieval (PIR) 是一种隐私增强技术,它使用户能够在不暴露他们实际查询内容的情况下从远程服务器数据库中检索所需信息。以下是隐语在实现PIR方面的概要说明和技术特点: 基本概念: PI…

移动硬盘无法读取打不开?原因分析与解决方案

一、移动硬盘遭遇困境:无法读取打不开 在数字信息爆炸的时代,移动硬盘成为了我们储存和传输数据的重要工具。然而,当移动硬盘突然无法读取打不开时,我们往往会感到手足无措。插入电脑后,移动硬盘的指示灯可能正常闪烁…

算法系列--动态规划--特殊的状态表示--分析重复子问题

💕"轻舟已过万重山!"💕 作者:Lvzi 文章主要内容:算法系列–算法系列–动态规划–特殊的状态表示–分析重复子问题 大家好,今天为大家带来的是算法系列--动态规划--特殊的状态表示--分析重复子问题 一.组合总数IV 链接…

dubbo下

dubbo 集成springboot 配置文件 controller 启动类 注册中心宕机 负载均衡 zookeeper注册中心 dubbo原理 dubbo架构 各层说明 增强spi原理

Native Instruments Kontakt 7 for Mac v7.9.0 专业音频采样

Native Instruments Kontakt 7是一款强大的软件采样器,它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库,包括乐器、合成器、鼓组和声音效果等。此外,Kontakt 7还允许用户创建自己的采样库,以便根据自己的需要…