MySQL个人复习总结

最近想把MySQL的知识点再过一遍,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点可以参考之前写的如下几篇博客,这篇不再赘述,阅读顺序由浅入深依次递进。

一、MySQL 概述 数据库&表操作 数据增删改;
二、MySQL 单表查询 多表设计;
三、MySQL 多表查询 事务 索引;
四、Mybatis入门;
五、Mybatis—基础操作;
六、Mybatis—XML配置文件、动态SQL;
七、MySQL窗口函数入门指南

目录

  • SQL的优化方式有哪些?
  • PostgreSQL和MySQL之间的一些对比
  • Mysql中MyISAM和innoDB引擎的区别
  • 执行一条 select 语句,期间发生了什么?
  • InnoDB如何存储数据?为什么选择B+树作为索引数据结构?
  • 使用 like “%x“,索引一定会失效吗?
  • Count(\*)、Count(1)、Count(主键)、Count(字段)性能?如何优化Count(\*)?
  • 简单介绍一下MVCC机制和Read View。MySQL 可重复读隔离级别,完全解决幻读了吗?如何避免?
  • 一条update 语句的执行过程?
  • 为什么需要二阶段提交?它的原理是什么?
  • 三种日志的作用?redo log 要写到磁盘,数据也要写磁盘,为什么要多此一举?
  • 持续更新ing

SQL的优化方式有哪些?

慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化。

  • 避免查询不必要的列。SQL查询的时候,应该只查询需要的列,而不要包含额外的列,像select *这种写法应该尽量避免,浪费CPU资源,也可能导致索引失效。PS:能走索引覆盖就走索引覆盖,避免回表,下面也会提到。

  • 分页优化。在数据量比较大,分页比较深的情况:limit 100000,10(此时会读到第100000条数据然后读取10条返回,抛弃前面的100000条),要考虑深分页的优化。有两种解决思路
    • 1.延迟关联。延迟关联优化的核心思想是通过主键提取数据行,避免在原始表上进行扫描和跳过行的操作。先通过where 条件提取出主键,这里只查id可以走覆盖索引,再将该表与原数据表关联,通过主键 id提取数据行,直接走了主键索引而不是通过原来的二级索引提取数据行。比如原来是select * from table where type = 2 and level = 9 order by id asc limit 100000,10;
      那么现在是select a.* from table a,
      (select id from table where type = 2 and level = 9 order by id asc limit 100000,10 ) b where a.id = b.id;
    • id偏移量。偏移量就是找到limit第一个参数对应的主键值,根据这个主键值再去过滤并limit,比如:
      select * from table where id >
      (select * from table where type = 2 and level = 9 order by id asc limit 190);

  • 索引优化
    • 利用索引覆盖,减少回表
    • 避免使用or查询。MySQL 5.0之前的版本要尽量避免使用or查询,可以使用union或者子查询来替代,早期的版本使用or查询可能会导致索引失效,高版本引入了索引合并,解决了这个问题,不过建议在实际使用中还是规范写法,能不用就少用。
    • 避免使用!=或者<>操作符。SQL中,不等于操作符会导致查询引擎放弃查询索引,引起全表扫描,即使比较的字段上有索引
      解决方法:通过把不等于操作符改成or,可以使用索引,避免全表扫描。id <> ‘aaa’ ===> id > ‘aaa’ or id < ‘aaa’
    • 适当使用前缀索引,可以降低索引空间方用,提高索引的查询效率。
      比如,邮箱的后缀都是固定的“@x.com”,那么类似这种后面几位为固定值的字段,前面那一部分数据就非常适合定义为前缀索引,因为后面都是冗余数据,截取后做索引的话单个节点就能存放更多的索引值了。
      需要注意的是,前缀索引也存在缺点,MySQL无法利用前缀索引做order by和 group by 操作,也无法作为覆盖索引。
    • 避免在列字段上进行算术运算或其他表达式运算,否则可能会导致存储引擎无法正确使用索引,从而影响了查询的效率。
    • 正确使用联合索引。使用联合索引的时候,注意最左匹配原则。
    • 对于WHERE条件,GROUP BY,ORDER BY里用不到的字段;字段中存在大量重复数据(性别男、女);表数据太少的时候;经常更新的字段;这些都避免去创建索引;
    • 主键索引最好是自增,且主键字段长度应尽量小。InnoDB主键索引默认是聚簇索引,数据存放在B+Tree叶子节点上,保证了数据按主键顺序存放。使用自增主键可以高效插入数据,避免数据移动和页分裂,保持索引紧凑。非自增主键可能导致插入时数据移动和页分裂,影响性能和空间利用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构复习指导之数组和特殊矩阵

文章目录 数组和特殊矩阵 考纲内容 复习提示 前言 1.数组的定义 2.数组的存储结构 3.特殊矩阵的压缩存储 3.1对称矩阵 3.2三角矩阵 3.3三对角矩阵 4.稀疏矩阵 5.知识回顾 数组和特殊矩阵 考纲内容 &#xff08;一&#xff09;栈和队列的基本概念 &#xff08;二&a…

ubuntu neo4j 下载与配置(一)

neo4j 官方下载页面 https://neo4j.com/deployment-center/#community 进入页面之后&#xff0c;往下滑 咱们在下载neo4j时&#xff0c;官方可能要咱们填写一下个人信息&#xff0c;比如&#xff1a;姓名组织结构邮箱等&#xff1a; 咱们可以观察一下&#xff0c;ne4j的下载链…

iOS 实现类似抖音翻页滚动效果

这里是效果图 参考抖音的滚动效果&#xff0c;需要我们在结束拖动的时候&#xff0c;动画设置偏移量 这里有一个注意点&#xff0c;由于我们是在拖动结束的时候&#xff0c;手动改变tableview的偏移量&#xff0c; 改变了tableView 自身原有的的滚动效果&#xff0c;所以我们…

C++奇迹之旅:类和对象const成员static关键字友元内部类

文章目录 &#x1f4dd;const成员&#x1f320; const 成员函数是什么&#xff1f;&#x1f320; 取地址及const取地址操作符重载 &#x1f309;static成员&#x1f320;概念&#x1f320;static特性&#x1f309;static小题 &#x1f320;友元&#x1f309; 友元函数&#x1f…

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动 解决步骤&#xff1a; 1.去以下的目录中删掉.npmrc文件&#xff08;只在C:\User.npmrc&#xff09; 2.清除缓存&#xff0c;使用npm cache verify 不要用npm cache clean --force&#xff0c;容易出现npm WAR…

国产AI大模型加速“上车”

上海白领刘先生&#xff0c;坐上他的汽车主驾&#xff0c;向右扭头说&#xff1a;“打开那窗户。”话音刚落&#xff0c;副驾驶的车窗自动开了。 这辆车搭载了基于国产AI大模型的智能系统&#xff0c;就像有了人的大脑和神经网络&#xff0c;通过学习提升语音、视觉等多模态感…

VCSA6.7重置root密码

VCSA6.7重置root密码 1、登录VCSA所运行的ESXI主机 2、打开VCSA虚拟机Web控制台&#xff0c;先拍摄一个快照&#xff0c;然后重启虚拟机&#xff0c;在如下界面按"e" 3、找到linux开头的段落&#xff0c;在末尾追加rw init/bin/bash; 4、输入完成后&#xff0c;按&…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

溪谷软件:游戏联运有多简单?

游戏联运&#xff0c;即游戏联合运营&#xff0c;是一种游戏运营模式&#xff0c;涉及到多个平台或公司共同推广和运营同一款游戏。对于开发者而言&#xff0c;游戏联运的简化程度可能因具体情况而异&#xff0c;但以下是一些因素&#xff0c;使得游戏联运在某种程度上变得更加…

J9inceptionv3

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊# 前言 上周学习了inceptionv1网络&#xff0c;这周学习其改进版本inceptionv3 简介 Inception v3是谷歌研究团队提出的深度卷积神经网络架构&#xff0c;通过…

Docker-compose 简单介绍

目录 一 Docker-compose与 Docker Swarm 1&#xff0c;docker-compose 出现的意义 2&#xff0c; Docker Compose 是什么 3&#xff0c;Docker Swarm 是什么 3&#xff0c;Docker Compose Docker Swarm 主要区别 二 Docker-compose 简介 1&#xff0…

鸿蒙开发接口Ability框架:【@ohos.ability.dataUriUtils (DataUriUtils模块)】

DataUriUtils模块 DataUriUtils模块提供用于处理使用DataAbilityHelper方案的对象的实用程序类的能力&#xff0c;包括获取&#xff0c;添加&#xff0c;更新给定uri的路径组件末尾的ID。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#x…

windows ubuntu sed,awk,grep篇,8,Awk 语法和基础命令

目录 51.Awk 命令语法 52.Awk 程序结构(BEGIN,body,END)区域 53.打印命令 54.模式匹配 Awk 是一个维护和处理文本数据文件的强大语言。在文本数据有一定的格式&#xff0c;即每行数据包 含多个以分界符分隔的字段时&#xff0c;显得尤其有用。即便是输入文件没有一定的格式&a…

在使用ChatGPT之前,你真的知道这些吗?|TodayAI

当OpenAI在2022年11月发布ChatGPT时&#xff0c;它标志着技术领域的一次重大突破。ChatGPT是一个高级AI聊天机器人&#xff0c;它的功能几乎令人难以置信。过去的AI技术多年来一直在逐步发展&#xff0c;早期版本通常只能生成毫无意义的文本或质量较差的图片。这些早期的尝试虽…

安装 AngularJS

安装 AngularJS 文章目录 安装 AngularJS1. 使用在线 cdn2. 使用依赖管理工具 npm 1. 使用在线 cdn <!-- 1. 引入在线地址 --> <script src"http://code.angularjs.org/1.2.25/angular.min.js"></script><!-- 2. 下载到本地&#xff0c;引入文…

集合系列(二十二) -一文到你搞懂二叉树实现

一、介绍 在前面的文章中&#xff0c;我们对树这种数据结构做了一些基本介绍&#xff0c;今天我们继续来聊聊一种非常常用的动态查找树&#xff1a; 二叉查找树。 二叉查找树&#xff0c;英文全称&#xff1a;Binary Search Tree&#xff0c;简称&#xff1a;BST&#xff0c;…

js cookie和它的写入,读取,删除

什么是cookie Cookie 是直接存储在浏览器中的一小串数据&#xff0c;它们是 HTTP 协议的一部分 Cookie 通常是由 Web 服务器使用响应 Set-Cookie HTTP-header 设置的。然后浏览器使用 Cookie HTTP-header 将它们自动添加到&#xff08;几乎&#xff09;每个对相同域的请求中。…

升级价值主张 用友帮企业找到乘风破浪的“密码”

近期&#xff0c;用友发布了其战略级产品用友BIP的全新价值主张&#xff0c;将其从原来的“企业数智化 用友BIP”升级为“用友BIP 成就数智企业”。用友这次价值主张升级看似变动不大&#xff0c;实则大有深意。 顺势而为的主动升级 从当前数智化发展的形势来看&#xff0c;各…

牛客NC320 装箱问题【中等 动态规划,背包问题 C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/d195a735f05b46cf8f210c4ad250681c 几乎完全相同的题目&#xff1a; https://www.lintcode.com/problem/92/description 思路 动态规划都是递归递推而来。php答案是动态规划版本&#xff0c;递归版本有 测试用…

ios CI/CD 持续集成 组件化专题五-(自动发布私有库-组件化搭建)

一&#xff1a;手动发布私有库总结 手动发布pod私有库&#xff0c;需要进行如下几步操作&#xff1a; 1、修改完代码之后&#xff0c;需要提交代码push到git仓库。 2、给代码打tag。 3、修改podspec文件的version值&#xff0c;使其和设置的tag一直。 4、命令行执行pod repo…