Java每日面试题(mysql优化)(day14)

news2024/12/30 2:45:19

目录

  • 连接查询
  • MySQL常用函数汇总
  • SQL Select 语句的执行顺序
  • 数据库三范式
  • MyISAM 存储引擎 与 InnoDB 引擎区别
  • 索引
    • 索引的优缺点
    • 索引的分类
    • 索引结构
    • B树与B+树的区别
    • 索引失效的几种情况
  • 数据库锁
  • MySql 优化

连接查询


连接查询

MySQL常用函数汇总


常用函数

SQL Select 语句的执行顺序


SQL执行顺序

数据库三范式


  • 第一范式
    1NF 原子性,列或者字段不能再分,要求属性具有原子性,不可再分解;

  • 第二范式
    2NF 唯一标识。即每个表只描述一种实体,每个记录都有唯一标识,不存在部分依赖关系。主要是解决 的冗余。

    1. 每个表必须有一个主键
    2. 非主键字段要完全依赖于主键
  • 第三范式
    3NF 直接性非主键字段不依赖于其它非主键字段, 主要是解决 的冗余

MyISAM 存储引擎 与 InnoDB 引擎区别


  1. 事务支持MyISAM 不支持事务处理,而 InnoDB 支持事务处理,可以通过使用事务来确保数据的完整性和一致性。

  2. 锁定机制(锁的粒度):MyISAM 表级锁在执行 SELECT 操作时会对 进行读锁定,而执行 INSERT、UPDATE 或 DELETE 操作时会对 进行写锁定,因此在写操作执行时,读操作会被阻塞。而 InnoDB 支持行级锁,不会对整个表进行锁定,可以减少锁定冲突和死锁的发生。

  3. 外键支持MyISAM 不支持外键约束,而 InnoDB 支持外键约束,可以通过外键约 束来保证数据的引用完整性

  4. 并发性能:在并发性能方面,InnoDB 要优于 MyISAM。由于 InnoDB 支持行级锁定事务处理,因此在高并发情况下,InnoDB 的并发性能更高。

因此,在设计数据库时,需要考虑具体情况选择适合的 存储引擎。

  • 如果需要支持事务处理外键约束,以及具有更好的并发性能,则应选择 InnoDB
  • 如果只是进行简单的读写操作,并且需要更快的查询速度,则可以选择 MyISAM

索引


索引存储在 内存 中,为服务器存储引擎为了快速找到记录的一种数据结构。

索引的主要作用是 加快数据查找速度,提高数据库的性能。 空间换时间

索引的优缺点


优点:加快查询效率

  1. 创建唯一性索引,保证数据库表中每一行数据的唯一性

  2. 大大加快数据的检索速度,这也是创建索引的最主要的原因

  3. 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

  4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

缺点:

  1. 占用内存空间
  2. 影响增删改,效率低下.

索引的分类


  1. 普通索引:最基本的索引,它没有任何限制。(值可重复

  2. 唯一索引:与普通索引类似,不同的就是索引列的值必须唯一,但允许有空值

  3. 主键索引:它是一种特殊的唯一索引,用于唯一标识数据表中的某一条记录,不允许有空值,一般用 primary key 来约束。

  4. 联合索引(又叫复合索引)多个字段上建立的索引,能够加速复合查询条件的检索,遵循最左匹配原则(定义联合索引时左边的字段可单独使用索引,右边的字段不能单独使用索引)。

  5. 全文索引老版本 MySQL 自带的全文索引只能用于数据库引擎为MyISAM 的数据表,新版本 MySQL 5.6 的 InnoDB 1支持全文索引。默认 MySQL不支持中文全文检索,可以通过扩展 MySQL,添加中文全文检索或为中文内容表提供一个对应的英文索引表的方式来支持中文,一般使用ElasticSearch做搜索引擎库

索引结构


Mysql 目前提供了以下 4 种索引:

  1. B+Tree 索引: 最常见的索引类型, 大部分索引都支持 B+树索引.
  2. Hash 索引: 只有 Memory 引擎支持, 使用场景简单.
  3. R-Tree 索引(空间索引): 空间索引是 MyISAM 引擎的一个特殊索引类型, 主要地理空间数据, 使用也很少.
  4. S-Full-text(全文索引): 全文索引也是 MyISAM的一个特殊索引类型, 主要用于全文索引, InnoDB 从 Mysql5.6 版本开始支持全文索引.
    索引结构

B树与B+树的区别

  1. 存储数据的位置:
    • B树: 数据既存储在所有节点中(叶子节点和非叶子节点都有数据)
    • B+树: 所有的数据记录都存储在叶子节点中,非叶子节点仅包含索引信息。叶子节点包含了完整的数据和索引键。
  2. 叶子节点之间的链接:
    • B树: 叶子节点之间没有链接。
    • B+树: 叶子节点之间通过指针相互链接,形成一个 链表循环链表,这使得范围查询和遍历变得高效。
      B+树和B树的区别

补充:动画演示数据结构

索引失效的几种情况


  1. 范围条件查询
    当查询到的记录大于总记录数30%时,就不再使用索引,直接会扫描全表

  2. 索引列上操作(使用函数、计算等)导致索引失效

  3. 字符串不加引号, 造成索引失效

  4. 尽量使用 索引覆盖 ,避免 select *,这样能提高查询效率.

  • 索引覆盖: 索引中直接包含所需数据
  • 回表:通过索引不能完全拿出你要的信息,需要通过数据表再次查询一次才能获取到.
  1. OR 关键字连接
    OR关键字两边的字段必须都要有索引,任一个字段没索引就会进行全表扫描

  2. 使用 != 导致索引失效

  3. like以通配符开头('%abc...')导致索引失效

  4. 排序列包含不同索引的列

数据库锁


  1. 行锁和表锁
    主要是针对锁粒度划分的,一般分为:行锁、表锁、库锁

    • 行锁:访问数据库的时候,锁定整个行数据, 防止并发错误。

    • 表锁:访问数据库的时候,锁定整个表数据,防止并发错误。

    行锁 和 表锁 的区别

    • 行锁
      开销大,加锁慢,会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高
    • 表锁
      开销小,加锁快,不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
  2. 悲观锁和乐观锁

    • 悲观锁:每次去拿数据的时候都认为会进行修改,所有每次在拿数据的时候都会上锁.
    • 乐观锁:每次去拿数据的时候都认为不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间有没有更新这个数据,可以使用版本号等机制,乐观锁适用于多读的应用类型 ,这样可以提高吞吐量 。

MySql 优化


MySQL优化方案

  1. 定位执行效率慢的 sql 语句

    • explain + sql语句查询sql执行过程,可了解到:
      • 哪些步骤花费的成本比较高
      • 这条sql语句是否走索引
    • 慢查询日志(常用)
      慢 查 询 日 志 记 录 了 所 有 执 行 时 间 超 过 参 数 long_query_time 的 sql 语 句 的 日 志
  2. 优化索引

    • 查询频次较高, 且数据量比较大的表, 建立索引.
    • 索引字段的选择, 最佳候选列应当从 where 子句的条件中提取, 如果 where 子句中的组合比较多, 那么应当挑选最常用, 过滤效果最好的列的组合.
    • 使用唯一索引, 区分度越高, 使用索引的效率越高,能建唯一索引就建唯一索引,或者普通索引
    • 索引并非越多越好, 如果该表赠,删,改操作较多, 慎重选择建立索引, 过多索引会降低表维护效率. 不是越多越好
    • 使用短索引., 提高索引访问时的 I/O 效率, 因此也相应提升了 Mysql 查询效率.
      如果 where 后有多个条件经常被用到, 建议建立复合索引, 复合索引需要遵循最左前缀法则, N 个列组合而成的复合索引, 相当于创建了 N 个索引.

    复合索引命名规则 index _ 表名 _ 列名 1 _ 列名 2 _ 列名 3

  3. Sql 语句调优

    • 根据业务场景建立复合索引只查询业务需要的字段,如果这些字段被索引覆盖,将极大的提高查询效率.
    • 多表连接的字段上需要建立索引,这样可以极大提高表连接的效率.
    • where 条件字段上需要建立索引, 但 Where 条件上不要使用运算函数,以免索引失效.
    • 排序字段上, 因为排序效率低, 添加索引能提高查询效率.
    • 优化 order by 语句: 在使用 order by 语句时, 不要使用 select *, select 后面要查有索引的列, 如果一条 sql 语句中对多个列进行排序, 在业务允许情况下, 尽量同时用升序或同时用降序.
    • 优化 group by 语句: 在我们对某一个字段进行分组的时候, Mysql 默认就进行了排序,但是排序并不是我们业务所需的, 额外的排序会降低效率. 所以在用的时候可以禁止排序, 使用 order by null 禁用.
      select age, count(*) from emp group by age order by null
      
    • 尽量避免子查询, 可以将子查询优化为 join 多表连接查询.
  4. 合理的数据库设计

    • 保留冗余字段。当两个或多个表在查询中经常需要连接时,可以在其中一个表上增加若干冗余的字段,以 避免表之间的连接过于频繁,一般在冗余列的数据不经常变动的情况下使用。

    • 增加派生列。派生列是由表中的其它多个列的计算所得,增加派生列可以减少统计运算,在数据汇总时可以大大缩短运算时间, 前提是这个列经常被用到, 这也就是反第三范式

    • 分割表
      数据表拆分:主要就是垂直拆分和水平拆分。

      • 水平切分:将记录散列到不同的表中,各表的结构完全相同,每次从分表中查询, 提高效率。
      • 垂直切分:将表中大字段单独拆分到另外一张表, 形成一对一的关系。
    • 字段设计

      1. 表的字段尽可能用 NOT NULL

      2. 字段长度固定的表查询会更快

      3. 把数据库的大表按时间或一些标志分成小表

相关文章:数据库事务相关面试题

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

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

相关文章

物联网网络中集中式与分布式SDN环境的比较分析

论文标题:Comparative Analysis of Centralized and Distributed SDN Environments for IoT Networks 中文标题:物联网网络中集中式与分布式SDN环境的比较分析 作者信息: Khirota G. Yalda, Diyar J. Hamad, Nicolae Tapus罗马尼亚布加勒斯…

科研绘图系列:R语言树结构聚类热图(cluster heatmap)

文章目录 介绍加载R包导入数据数据预处理画图修改图形导出数据系统信息介绍 热图结合树结构展示聚类结果通常用于展示数据集中的模式和关系,这种图形被称为聚类热图或层次聚类热图。在这种图中,热图部分显示了数据矩阵的颜色编码值,而树结构(通常称为树状图或聚类树)则显…

【高中数学/函数/零点】求分段函数f(x)=x^2-4x+2(x>=1) f(x)=|lg(1-x)| (x<1)的零点个数

【问题】 已知分段函数f(x)x^22x(当x<0时)&#xff0c;f(x)|lgx|(当x>0时)&#xff0c;则函数g(x)f(1-x)-1的零点个数为几个&#xff1f; 【来源】 《高考数学极致解题大招》P137 变式训练第1题 中原教研工作室编著 【解答】 f(1-x)-10即f(1-x)1 当1-x>0,即x&l…

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决 第一部分&#xff1a;windbg调试记录。 0: kd> g Breakpoint 10 hit winmine!DoButton1Up: 001b:0100390e a130510001 mov eax,dword ptr [winmine!xCur (01005130)] 0: kd> kc # 00 winmine…

基于JAVA+SpringBoot+Vue的健身房管理系统1

基于JAVASpringBootVue的健身房管理系统1 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽…

element ui中当el-dialog需要做全屏时,.fullscreen样式修改问题

element ui 饿了么UI中el-dialog样式修改问题 场景解决方法就是&#xff1a;去掉底部样式中的scoped,然后再进行页面级样式的更改即可。 场景 最近在使用element-ui时&#xff0c;使用到了弹窗组件&#xff1a; element-ui 官网链接地址&#xff1a; element-ui 官网链接地址…

C语言指针系列1——初识指针

祛魅&#xff1a;其实指针这块儿并不难&#xff0c;有人说难只是因为基础到进阶没有处理好&#xff0c;大家要好好跟着一步一步学习&#xff0c;今天我们先来认识一下指针 指针定义&#xff1a;指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一…

Java线程的三大特性

原子性: 线程任务不可再分。 int i 1; i; 原子类 AtomicXXX 可见性: 线程之间的操作是互相不可见的。 volatile //线程A如果&#xff0c;flag为true&#xff0c;就运行打印语句 A: trueThread t1 new Thread(() -> {while (true) {if (flag) {System.out.println(&q…

卷积神经网络-迁移学习

文章目录 一、迁移学习1.定义与性质2.步骤 二、Batch Normalization&#xff08;批次归一化&#xff09;三、ResNet网络1.核心思想2.残差结构&#xff08;1&#xff09;残差块&#xff08;2&#xff09;残差结构类型 四、总结 一、迁移学习 迁移学习&#xff08;Transfer Lear…

zabbix基本概念与组件

文章目录 一、zabbix简介二、​​​​​​​zabbix构成三、​​​​​​​zabbix监控对象四、​​​​​​​zabbix常用术语五、 Zabbix 6.0 新特性1.Zabbix server高可用防止硬件故障或计划维护期的停机2.Kubernetes系统从多个维度采集指标 六、zabbix 工作原理1、主动模式2、…

操作配置笔记

一、检查&#xff1a; 1.查看当前配置 display current-configuration 2.查看路由表 display ip routing-table 3.查看当前配置情况 display this 4.查看当前设备版本 display version 5.查看接口 display interface display ip interface 6.查看保存的当前配置 display sav…

openinstall鸿蒙SDK再升级,功能全面支持HarmonyOS NEXT

万众期待的鸿蒙操作系统HarmonyOS NEXT即将发布&#xff0c;国产自主的全场景智能操作系统诞生&#xff0c;将为生态伙伴共创共享创造新蓝海&#xff0c;鸿蒙生态的加速构建&#xff0c;也有望催生出互联网生态的第三极。 作为首批鸿蒙生态伙伴&#xff0c;openinstall在App渠…

AR 眼镜之-蓝牙电话-来电铃声与系统音效

目录 &#x1f4c2; 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 系统音效 1. &#x1f531; Android9 原生的来电铃声&#xff0c;走的哪个通道&#xff1f; 2. &#x1f4a0; Android9 原生的来电铃声&#xff0c;使用什么播放&#xff1f; 2.1 来电铃声创建准备 2.2 来…

C语言指针系列2——加深理解

大家&#xff0c;今天讲的知识点是一块儿一块儿的&#xff0c;所以大家要好好学习喔~ 话不多说&#xff0c;开始正题 关键字&#xff1a;const &#xff08;三种用法&#xff09; 1. int* const p; 2. int const* p; 3. const int* const p; 首先我们要了解一下const&#xff…

828华为云征文|使用Flexus X实例安装宝塔面板教学

目录 一、Flexus X实例简介 1.1 概述 1.2 产品规格 二、切换操作系统 2.1 Huawei Cloud EulerOS 2.0 标准版 2.2 切换镜像 三、部署宝塔面板 3.1 安装宝塔面板 3.2 放通安全组规则 3.3 登录宝塔面板 四、使用感受 4.1 柔性算力随心配 4.2 一直加速一直快 4.3 越用…

C++之分割字符串的两种方式

方式一 #include <string> #include <vector> #include <sstream> #include <iostream>std::vector<std::string> split(const std::string& str, char delim) {std::stringstream ss(str);std::string item;std::vector<std::string>…

防火墙-CentOS7-firewalld

文章目录 一、防火墙以及Linux防火墙服务介绍什么是防火墙&#xff0c;有什么用防火墙的结构防火墙的作用为什么需要防火墙防火墙何时需要开启防火墙何时可以关闭名词什么是入站&#xff1f;出站 Linux防火墙发展历程1. 初期阶段2. iptables的出现3. 发展与扩展4. nftables的引…

Codeforces Round 592 (Div. 2) C题 The Football Season(Exgcd)

题目链接 https://codeforces.com/problemset/problem/1244/C 思路 其实就是要求 a x b y c axbyc axbyc的一组 x y xy xy的最小整数解。因为题目保证了 a > b a>b a>b&#xff0c;所以只需要使得 y y y最小即可。 我们对 a x b y c axbyc axbyc推导得到&…

jmeter断言---响应断言

请求http://www.baidu.com 检查&#xff1a;让程序检查响应数据中是否包含“百度一下&#xff0c;你就知道” 操作步骤&#xff1a; 1.添加线程组 2.添加http请求 3.添加断言&#xff08;需要在http请求下添加断言&#xff0c;而且可以根据断言测试字段等信息新建不同的断…

黑盒测试与白盒测试总结

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 黑盒测试与白盒测试是软件测试中两种不同的测试方法&#xff0c;它们的主要区别在于测试者对被测试软件的了解程度。下面&#xff0c;我们将详细介绍这两种测试方…