MySQL相关问题-2

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: MySQL索引包括主键索引、唯一索引和组合索引。主键索引唯一且非空,一个表仅有一个;唯一索引允许NULL值,可创建多个;组合索引需遵循左前缀原则,否则失效。回表查询是指通过非聚簇索引查到主键后再查询完整数据,适用于查询字段超出索引列和主键的情况。左前缀原则源于B+Tree结构,确保查询条件按复合索引列顺序使用,否则索引失效。

Q:MySQL的索引有哪些

1.主键索引

  • 唯一标识表中的一行数据,不允许 NULL 值。
  • 一个表只能有一个主键。
  • InnoDB 存储引擎中,主键索引直接存储整行数据(聚簇索引)。
CREATE TABLE users (
    id INT PRIMARY KEY,  -- 声明主键
    name VARCHAR(50));

2.唯一索引

  • 保证索引列的值唯一,但允许 NULL 值(多个 NULL 不冲突)。
  • 可创建多个唯一索引。
CREATE UNIQUE INDEX idx_email ON users(email);

3.组合索引

  • 索引会按照定义的列顺序依次使用,若查询条件未包含最左侧的列,则索引失效




Q:回表查询

回表查询:回标查询就是查询时先通过索引查到对应的主键值,然后通过主键值来查询整条数据。但不是说所有的非聚簇索引查询都会使用回表查询。只有我需要查询的字段不止查询的条件字段及主键时才会触发回表查询

意思是如果我通过Name这个字段进行查找,如下第一行sql所示,如果我的表只需要id,Name的话是不会进行回表查询的

select id,Name from biao where Name = 'zhangsan'          //只查询了id(主键),Name字段
select * from biao where Name = 'zhangsan'               //查询了除id,Name字段

在第三行,查询所有字段,此时就会触发回表查询

  • 优点:利用索引快速定位数据,避免全表扫描。
  • 缺点:
  • 多次随机 I/O:若查询结果集较大,回表操作会导致大量随机磁盘访问(每次回表可能跨页)。



Q:什么是左前缀原则

左前缀原则就是说在执行查询时,条件字段的顺序必须与复合索引创建时列的字段的顺序一致,这就是遵循了左前缀原则,就可以利用复合索引,如果在使用复合索引时,不遵从左前缀原则,这个复合索引就会失效


扩展:为什么需要左前缀原则?

因为B+Tree的存储结构决定了查询方式,以(a,b,c)复合索引来举个例的话就是

1.先按a排序

2.当a相同时,按b排序

3.当a和b都相同时,按c排序

如果在2,3中的查询条件中不包含a的话,数据库无法快速定位到数据的起始位置,可能会导致全索引扫描或者全表扫描

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Go 开发工具 C语言
flutter项目打包.exe文件发布windows版
目录 发布windows版 1.为现有的 Flutter 应用程序添加桌面支持 2..创建main_desktop.dart文件 3.hover安装和环境配置 4.初始化,并打包 坑1
2281 0
flutter项目打包.exe文件发布windows版
|
存储 Cloud Native API
oss云网关配置
配置阿里云OSS与云网关实现灵活数据传输和访问控制。步骤包括开通OSS服务,创建Bucket,获取访问凭证,可选配置CORS和生命周期规则。云网关配置涉及阿里云云原生网关的代理规则设定或使用云存储网关集成OSS访问,具体配置需参照产品文档,因产品更新可能会有变动。
935 1
|
4月前
|
人工智能 前端开发 IDE
AI 原生研发范式:从“代码中心”到“文档驱动”的演进
本文讲述在 AI 编程时代,通过 SDD解决上下文腐烂、审查瘫痪、维护断层三大工程失序问题,并提供一套轻量、可落地的人机协作 SOP。
AI 原生研发范式:从“代码中心”到“文档驱动”的演进
|
9月前
|
人工智能 算法 小程序
再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Qoder 。真的是太好用了,一点也不比 Cursor 差。
1757 10
|
前端开发 JavaScript Java
java常用数据判空、比较和类型转换
本文介绍了Java开发中常见的数据处理技巧,包括数据判空、数据比较和类型转换。详细讲解了字符串、Integer、对象、List、Map、Set及数组的判空方法,推荐使用工具类如StringUtils、Objects等。同时,讨论了基本数据类型与引用数据类型的比较方法,以及自动类型转换和强制类型转换的规则。最后,提供了数值类型与字符串互相转换的具体示例。
934 3
|
11月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
278 2
|
存储 设计模式 Java
探索 JavaBean(实体类)的奇妙世界
JavaBean(实体类)是Java开发中的重要概念,遵循特定设计模式的普通Java类。
1139 13
|
10月前
|
前端开发 Java 编译器
SSM相关问题-3-什么是AOP?--AOP的实现原理是什么---SpringMvc的执行流程
AOP(面向切面编程)是一种编程范式,旨在将横切关注点(如日志、事务管理)从业务逻辑中分离,提升代码模块化与可维护性。其核心包括切面、通知、切入点等概念,通过动态代理(如JDK、CGLIB)实现,增强代码灵活性与复用性。
459 0
|
机器学习/深度学习 编解码 算法
ICCV 2023 | 当尺度感知调制遇上Transformer,会碰撞出怎样的火花?
近年来,基于Transformer和CNN的视觉基础模型取得巨大成功。有许多研究进一步地将Transformer结构与CNN架构结合,设计出了更为高效的hybrid CNN-Transformer Network,但它们的精度仍然不尽如意。本文介绍了一种新的基础模型SMT(Scale-Aware Modulation Transformer),它以更低的参数量(params)和计算量(flops)取得了大幅性能的提升。
|
11月前
|
前端开发 Java Spring
SpringMvC的执行流程
客户端发送HTTP请求,Spring MVC的前端控制器DispatcherServlet接收请求并调用HandlerMapper进行映射,返回包含Controller和拦截器的执行链。控制器执行逻辑后返回ModelAndView,前端控制器再调用ViewResolver解析视图并渲染HTML页面,最终返回给客户端。
343 0