MySQL相关问题-2

简介: 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
2358 0
flutter项目打包.exe文件发布windows版
|
存储 Cloud Native API
oss云网关配置
配置阿里云OSS与云网关实现灵活数据传输和访问控制。步骤包括开通OSS服务,创建Bucket,获取访问凭证,可选配置CORS和生命周期规则。云网关配置涉及阿里云云原生网关的代理规则设定或使用云存储网关集成OSS访问,具体配置需参照产品文档,因产品更新可能会有变动。
974 1
|
6月前
|
人工智能 前端开发 IDE
AI 原生研发范式:从“代码中心”到“文档驱动”的演进
本文讲述在 AI 编程时代,通过 SDD解决上下文腐烂、审查瘫痪、维护断层三大工程失序问题,并提供一套轻量、可落地的人机协作 SOP。
AI 原生研发范式:从“代码中心”到“文档驱动”的演进
|
11月前
|
人工智能 算法 小程序
再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Qoder 。真的是太好用了,一点也不比 Cursor 差。
1848 10
|
Java 存储
线程池的核心参数有哪些?
线程池七大核心参数:核心/最大线程数、线程保持时间及单位、阻塞队列、线程工厂与拒绝策略。
1759 79
|
前端开发 JavaScript Java
java常用数据判空、比较和类型转换
本文介绍了Java开发中常见的数据处理技巧,包括数据判空、数据比较和类型转换。详细讲解了字符串、Integer、对象、List、Map、Set及数组的判空方法,推荐使用工具类如StringUtils、Objects等。同时,讨论了基本数据类型与引用数据类型的比较方法,以及自动类型转换和强制类型转换的规则。最后,提供了数值类型与字符串互相转换的具体示例。
1024 3
|
12月前
|
前端开发 Java 编译器
SSM相关问题-3-什么是AOP?--AOP的实现原理是什么---SpringMvc的执行流程
AOP(面向切面编程)是一种编程范式,旨在将横切关注点(如日志、事务管理)从业务逻辑中分离,提升代码模块化与可维护性。其核心包括切面、通知、切入点等概念,通过动态代理(如JDK、CGLIB)实现,增强代码灵活性与复用性。
500 0
|
Java Spring 容器
DI依赖注入的几种手段
本内容介绍了依赖注入的四种方式:构造器注入、接口注入、Setter注入和注解注入,并重点比较了Spring中的@Autowired与Java标准注解@Resource的区别,包括来源和依赖查找策略。
530 0
|
前端开发 Java Spring
SpringMvC的执行流程
客户端发送HTTP请求,Spring MVC的前端控制器DispatcherServlet接收请求并调用HandlerMapper进行映射,返回包含Controller和拦截器的执行链。控制器执行逻辑后返回ModelAndView,前端控制器再调用ViewResolver解析视图并渲染HTML页面,最终返回给客户端。
409 0
|
存储 算法 索引
HashMap的实现原理
HashMap基于哈希算法实现,采用链表散列结构(数组+链表/红黑树)。JDK1.8前使用拉链法解决冲突,将冲突元素存入链表。JDK1.8后,当链表长度超过8时,转化为红黑树以提升查找效率;当元素数小于6时,退化为链表。通过key的hashCode计算索引,put时若key相同则覆盖,不同则添加到链表或树中。get时通过hash值定位并判断key获取对应值。
464 0