MySQL查漏补缺使用指南_mysql基础知识教程

MySQL查漏补缺目录唯一索引比普通索引快吗, 为什么MySQL由哪些部分组成, 分别用来做什么MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更.MyISAM和InnoDB的区别有哪些MySQL怎么恢复半个月前的数据MySQL事务的隔离级别, 分别有什么特点做过哪些MySQL索引相关优化一千万条数据的表, 如何分页查询订单

MySQL查漏补缺使用指南

MySQL查漏补缺

目录

MySQL查漏补缺使用指南_mysql基础知识教程

唯一索引比普通索引快吗, 为什么

唯一索引不一定比普通索引快, 还可能慢.

  1. 查询时, 在未使用 limit 1 的情况下, 在匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现不匹配后返回. 如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微.
  2. 更新时, 这个情况就比较复杂了. 普通索引将记录放到 change buffer 中语句就执行完毕了. 而对唯一索引而言, 它必须要校验唯一性, 因此, 必须将数据页读入内存确定没有冲突, 然后才能继续操作. 对于 写多读少 的情况, 普通索引利用 change buffer 有效减少了对磁盘的访问次数, 因此普通索引性能要高于唯一索引.

MySQL由哪些部分组成, 分别用来做什么

  1. Server

    • 连接器: 管理连接, 权限验证.

    • 分析器: 词法分析, 语法分析.

    • 优化器: 执行计划生成, 索引的选择.

    • 执行器: 操作存储引擎, 返回执行结果.

  2. 存储引擎: 存储数据, 提供读写接口.

MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更.

  • 查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被情清空. 因此对于频繁更新的表来说, 查询缓存不一定能起到正面效果.

  • 对于读远多于写的表可以考虑使用查询缓存.

  • 8.0版本的查询缓存功能被删了 ( ̄. ̄).

MyISAM 和 InnoDB 的区别有哪些

  • InnoDB支持事务, MyISAM不支持.
  • InnoDB支持行级锁, MyISAM支持表级锁.
  • InnoDB支持多版本并发控制(MVVC), MyISAM不支持.
  • InnoDB支持外键, MyISAM不支持.
  • MyISAM支持全文索引, InnoDB不支持(但可以使用Sphinx插件)

MySQL怎么恢复半个月前的数据

通过整库备份+binlog进行恢复. 前提是要有定期整库备份且保存了binlog日志.

MySQL事务的隔离级别, 分别有什么特点

  1. 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到.
  2. 读提交(RC): 一个事务提交之后, 它做的变更才会被其他事务看到.
  3. 可重复读(RR): 一个事务执行过程中看到的数据, 总是跟这个事务在启动时看到的数据是一致的. 当然在可重复读隔离级别下, 未提交变更对其他事务也是不可见的.
  4. 串行化(S): 对于同一行记录, 读写都会加锁. 当出现读写锁冲突的时候, 后访问的事务必须等前一个事务执行完成才能继续执行.

做过哪些MySQL索引相关优化

  • 尽量使用主键查询: 聚簇索引上存储了全部数据, 相比普通索引查询, 减少了回表的消耗.
  • MySQL5.6之后引入了索引下推优化, 通过适当的使用联合索引, 减少回表判断的消耗.
  • 若频繁查询某一列数据, 可以考虑利用覆盖索引避免回表.
  • 联合索引将高频字段放在最左边.

简要说一下数据库范式

  • 第一范式: 属性不可再分.

  • 第二范式: 在一范式的基础上, 要求数据库表中的每个实例或行必须可以被惟一地区分. 通常需要为表加上一个列, 以存储各个实例的惟一标识. 这个惟一属性列被称为主关键字或主键.

  • 第三范式: 在二范式的基础上, 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息. 所以第三范式具有如下特征:1). 每一列只有一个值. 2). 每一行都能区分. 3). 每一个表都不包含其他表已经包含的非主关键字信息.

一千万条数据的表, 如何分页查询

数据量过大的情况下, limit offset 分页会由于扫描数据太多而越往后查询越慢. 可以配合当前页最后一条ID进行查询, SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT} . 当然, 这种情况下ID必须是有序的, 这也是有序ID的好处之一.

订单表数据量越来越大导致查询缓慢, 如何处理

分库分表. 由于历史订单使用率并不高, 高频的可能只是近期订单, 因此, 将订单表按照时间进行拆分, 根据数据量的大小考虑按月分表或按年分表. 订单ID最好包含时间(如根据雪花算法生成), 此时既能根据订单ID直接获取到订单记录, 也能按照时间进行查询.

海计划公众号
(0)
上一篇 2020/03/23 08:56
下一篇 2020/03/23 08:56

您可能感兴趣的内容

  • FastDom基础知识_让DOM的读/写操作捆绑在一起的js库

    FastDom基础知识 GitHub:https://github.com/wilsonpage/fastdom 简介描述:让DOM的读/写操作捆绑在一起的js库 FastDom是…

    2020/03/06
  • ES6之Promise入门基础_Promise小白攻略

    ES6之Promise入门基础 前言 Promise,用于解决回调地域带来的问题,将异步操作以同步的操作编程表达出来,避免了层层嵌套的回调函数。 什么是 Promise 所谓的 p…

    2020/03/20
  • javascript逻辑运算符有哪些?基础教程_运算指南教程

    JavaScript逻辑运算符有&&(逻辑与)、||(逻辑或)、!(逻辑非)。JavaScript逻辑运算符用于测定变量或值之间的逻辑。JavaScript中的逻辑运算符:运算符描述例子&&and(x 1) 为 true||or(x==5 || y==5) 为 false!not!(x==y) 为 true1、JS中的||符号:运算方

    2020/03/22
  • GraphQL 项目中的前端 mock 方案基础入门_工具使用说明

    在使用 GraphQL (以下简称 gql)的前端项目中,往往需要等待后台同学定义好 Schema 并架设好 Playground 以后才能进行联调。如果后台同学阻塞了,前端只能被动等待。如果对于 gql 项目来说也能够和 REST 一样有一套 mock 方案就好了。经过一系列实践,我选择了 mocker-api 加 Apollo 的方案来实现。mocker

    2020/03/26
  • 原生JS实现滚动条使用说明_滚动指南教程

    求滚动条的高度可视内容区的高度 / 内容区的实际高度 = 滚动条的高度 / 滑道的高度求内容区top的值内容区距离顶部的距离 / (内容区的实际高度 – 可视内容区域的高度 ) = 滚动条距离顶部的距离 / ( 滑道的高度 – 滚动条的高度)使用onmousewheel做好兼容处理document.onmousewheel = function (e){//

    2020/03/26
  • vue页面刷新时store中数据丢失基础指南_数据基础知识教程

    问题:当页面刷新时store的值丢失了。原因:当页面刷新时,vue实例重新加载,所以store也会被重置。解决办法:监听 beforeunload 让页面在刷新前将数据存到 sessionStorage 中,在页面刷新时,读取 sessionStorage 中的数据到 store 中。即在app.vue中加入以下代码:export default {name

    2020/03/22
  • vue响应式原理学习菜鸟教程下载_响应式入门教程

    vue响应式原理学习菜鸟教程下载 前言 提到vue,大家肯定会想到双向数据绑定,数据驱动视图,虚拟DOM,diff算法等等这些概念。在使用vue的时候,会感觉到它的数据双向绑定真的…

    2020/03/19
  • Js设计模式之:单例模式菜鸟指南_模式小白攻略

    良好的设计模式可以显著提高代码的可读性,降低复杂度和维护成本。笔者打算通过几篇文章通俗地讲一讲常见的或者实用的设计模式。今天先从最简单的一个入手:单例模式。文中的示例代码会使用 ES6 语法,尽量简化不必要的细节概念单例模式(Singleton)属于创建型的设计模式,它限制我们只能创建单一对象或者某个类的单一实例。通常情况下,使用该模式是为了控制整个应用程序

    2020/03/20
  • vue限制文本框输入数字的正确姿势小白攻略_数字基础入门

    最近遇到一个需求,需要限制文本框输入数字,而number类型的输入框有箭头,个人不是很喜欢,因此想要寻求其它途径实现。本想通过网上找个现成的插件,然而百度,谷歌一番都没有找到满意的答案,至于随手一搜出来的方案或多或少都有点缺陷。因此自己动手,丰衣足食。事件选型首先我们很容易想到通过事件来达到目的,大致可以通过以下几个事件来实现:keypress/keydow

    2020/03/24
  • Gavin Wood:创造一个web3.0的加密世界小白基础_web入门知识

    我最早是以太坊的联合创始人,也是CTO,黄皮书的作者。当开启以太坊时,我们是局外人,关注的焦点更多的是BTC。当时,人们将投身以太坊视为浪费时间和精力。但现在以太坊已经成长起来,进入了完整循环。但与此同时,也出现了以太坊原教旨主义者。有些人如今拒绝接受可能存在优秀和可靠技术,为什么你们想要超越以太坊区块链?1.我现在已经越过以太坊,创建了Polkadot这个

    2020/03/26
  • vue v-for 使用问题Error in render入门指南_指令小白常识

    今天使用v-for指令的时候遇到一个错误[Vue warn]: Error in render: “TypeError: Cannot read property ‘children’ of undefined”页面使用代码<div :key="i" c

    2020/03/29
  • sql.js小白教程_SQLite数据库的一个JavaScript移植

    sql.js小白教程 GitHub:https://github.com/kripken/sql.js 简介描述:SQLite数据库的一个JavaScript移植 sql.js是S…

    2020/03/11
  • WebDev小白入门_在线网站优化检测工具

    WebDev小白入门 官方网址:https://web.dev/ 简介描述:在线网站优化检测工具 WebDev是由谷歌发布的全新网站优化检测工具,让你的网站贴切搜索引擎,输入网址即…

    2020/03/10
  • PingWest品玩小白常识有品好玩的科技,一切与你有关

    PingWest品玩使用攻略 官方网址:http://www.pingwest.com/ 简介描述:有品好玩的科技,一切与你有关

    2020/03/06
  • 神奇的javascript入门基础知识_特性基础入门

    看一张图这张图对js魔法的吐槽可谓非常到位。下面,我们就从这张图出发来详细讲讲js。数字类型与精度问题虽然js是弱类型语言,声明变量时也不需要显式指定类型。但是,数据本身依旧还是有类型的,比如数字和字符串就是以不同形式存在的数据。在js中,所有数字的类型都为number。其中,一个特殊的数字就是NaN(Not a number),虽然名字叫“不是数”,但为了

    2020/03/23
  • React Developers的10个超实用神奇工具基础知识_工具基础知识教程

    React是一个用于构建用户界面的JavaScript库。但是,很多人都不知道,其实有非常多的有助于我们更好地使用React,提升用户开发体验的优秀工具。如果您还没有使用过React,或者有可能对使用它感兴趣,当他们问你为什么要使用这个库时,你会怎么说?除了告诉他们React的库有多棒(这应该是第一件事)之外,我还想提到开源社区创建的工具这部分,它将极大地提

    2020/03/26