• 查询缓存在什么问题?
  • 如何选择数据库的引擎?
  • InnoDB 自增索引的持久化问题

三大问题

1. 查询缓存的利弊

MySQL 8.0 之前可以正常的使用查询缓存的功能,可通过“SHOW GLOBAL VARIABLES LIKE ‘query_cache_type’”命令查询数据库是否开启了查询缓存的功能,它的结果值有以下三项:

  • OFF,关闭了查询缓存功能;
  • ON,开启了查询缓存功能;
  • DEMAND,在 sql 语句中指定 sql_cache
    关键字才会有查询缓存,也就是说必须使用 sql_cache 才可以把该 select 语句的查询结果缓存起来,比如“select
    sql_cache name from token where tid=1010”语句。

开启和关闭查询缓存可以通过修改 MySQL 的配置文件 my.cnf 进行修改,它的配置项如下:

query_cache_type = ON

注意:配置被更改之后需要重启 MySQL 服务才能生效。

查询缓存的功能要根据实际的情况进行使用,建议设置为按需缓存(DEMAND)模式,因为查询缓存的功能并不是那么好用。比如我们设置了 query_cache_type = ON,当我们好不容易缓存了很多查询语句之后,任何一条对此表的更新操作都会把和这个表关联的所有查询缓存全部清空,那么在更新频率相对较高的业务中,查询缓存功能完全是一个鸡肋。因此,在 MySQL 8.0 的版本中已经完全移除了此功能,也就是说在 MySQL 8.0 之后就完全没有查询缓存这个概念和功能了。

2. 如何选择数据库引擎

选择数据库引擎要从实际的业务情况入手,比如是否需要支持事务?是否需要支持外键?是否需要支持持久化?以及是否支持地理位置存储以及索引等方面进行综合考量。

我们最常用的数据库引擎是 InnoDB,它是 MySQL 5.5.5 之后的默认引擎,其优点是支持事务,且支持 4 种隔离级别。

  • 读未提交:也就是一个事务还没有提交时,它做的变更就能被其他事务看到。
  • 读已提交:指的是一个事务只有提交了之后,其他事务才能看得到它的变更。
  • 可重复读:此方式为默认的隔离级别,它是指一个事务在执行过程中(从开始到结束)看到的数据都是一致的,在这个过程中未提交的变更对其他事务也是不可见的。
  • 串行化:是指对同一行记录的读、写都会添加读锁和写锁,后面访问的事务必须等前一个事务执行完成之后才能继续执行,所以这种事务的执行效率很低。

InnoDB 还支持外键、崩溃后的快速恢复、支持全文检索(需要 5.6.4+ 版本)、集群索引,以及地理位置类型的存储和索引等功能。

MyISAM 引擎是 MySQL 原生的引擎,但它并不支持事务功能,这也是后来被 InnoDB 替代为默认引擎的主要原因。MyISAM 有独立的索引文件,因此在读取数据方面的性能很高,它也支持全文索引、地理位置存储和索引等功能,但不支持外键。

InnoDB 和 MyISAM 都支持持久化,但 MEMORY 引擎是将数据直接存储在内存中了,因此在重启服务之后数据就会丢失,但它带来的优点是执行速度很快,可以作为临时表来使用。

我们可以根据实际的情况设置相关的数据库引擎,还可以针对不同的表设置不同的数据引擎,只需要在创建表的时候指定 engine=引擎名称即可,SQL 代码如下:

create table student(id int primary key auto_increment,uname varchar(60),age int
) engine=Memory;

3. InnoDB 自增主键

有这样一道题目:

在一个自增表里面一共有 5 条数据,id 从 1 到 5,删除了最后两条数据,也就是 id 为 4 和 5 的数据,之后重启的 MySQL
服务器,又新增了一条数据,请问新增的数据 id 为几?

我们通常的答案是如果表为 MyISAM 引擎,那么 id 就是 6,如果是 InnoDB 那么 id 就是 4。

但是这个情况在高版本的 InnoDB 中,也就是 MySQL 8.0 之后就不准确了,它的 id 就不是 4 了,而是 6 了。因为在 MySQL 8.0 之后 InnoDB 会把索引持久化到日志中,重启服务之后自增索引是不会丢失的,因此答案是 6。

MySQL 的三个自问自答相关推荐

  1. 干货!JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  2. Golang 数组的一些自问自答

    基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题 image-20211227100817481 所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题: ...

  3. Maven 自问自答

    Maven 自问自答 Maven 自问自答 maven有什么用 POM 是一个什么东西 解读pom Build Lifecycle maven 三条指令运行web项目 maven常用指令 maven结 ...

  4. RT_Thread自问自答

    在看韦东山老师"RT-Thread内部机制"的视频,挺有意思的,有些概念的理解还是要深究一下,不然可能就是"我知道,这不就是那个....那个....那个",哪个 ...

  5. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  6. 了解mysql的三种不同安装方式的区别

    学习目的:了解mysql的三种不同安装方式的区别 学习内容: mysql 的安装有三种:分别是源码安装.二进制安装.rpm安装. 源码安装的优势:linux操作系统开放源代码,因此在其上面安装的软件大 ...

  7. 简易mysql优化_优化 MySQL:简单三个技巧

    原标题:优化 MySQL:简单三个技巧 技巧#1:为临时表分配足够的内存 在某些情况下,服务器在处理语句时会创建内部临时表.临时表用于内部操作如GROUP BY和distinct,还有一些ORDER ...

  8. MySQL入门 (三) : 运算式与函式

    运算式(expressions)已经在查询叙述中使用过,例如算数运算与「WHERE」子句中的条件判断. 虽然目前只有讨论查询资料的部份,不过你在任何地方都有可能使用运算式来完成你的工作. 一个运算式中 ...

  9. MySQL默认INFORMATION_SCHEMA,MySQL,TEST三个数据库用途(转)

    本文简要说明了MySQL数据库安装好后自带的INFORMATION_SCHEMA,MySQL,TEST三个数据库的用途. 第一个数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式 ...

最新文章

  1. Android ObjectOutputStream Serializable引发的血案
  2. Spring.net与Asp.net Mvc结合示例《转载》
  3. JS模式--职责链模式
  4. jquery 按钮效果 正常、移上、按下
  5. 图像浏览界面缩放和平移操作的实现
  6. 【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK
  7. Eclipse-不显示某些文件夹
  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction
  9. [翻译] ASP.NET MVC Framework控制器操作安全性
  10. iOS开发之字典(NSDictionary)和JSON字符串(NSString)之间互转
  11. 经典的观点挖掘算法(文本挖掘系列)
  12. 在 Linux 系统上源码安装 GTK+ 2.0
  13. 从金钱社会向财富第三极的过渡方案
  14. html网页中wmode,关于html:Quicktime-Wmode透明问题
  15. 常用的JScript代码整理
  16. MAC合约3.0API
  17. paypal是怎么收费的?
  18. 美通企业日报 | 无锡国际生命科学创新园开园;本特勒与恒大汽车博世实现合作...
  19. 骆昊-Java面试题全集(下)学习笔记_2018_12_17
  20. 普通人如何通过积分落户北京? 2021北京积分落户分析必看

热门文章

  1. c语言中int和void,关于指针:void(*)void和int(*)int在C中的含义是什么?
  2. iphone各个系列手机最新的尺寸资料(更新到iphone6s)
  3. Python爬取《扫黑风暴》腾讯视频弹幕
  4. Day07(续)Java方法讲解
  5. 帝国时代III亚洲王朝序列号自动输入器
  6. 第二章 前端开发——JavaScript
  7. Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容...
  8. TSP问题解决:模拟退火、贪心法、爬山法,Python实现
  9. 浅谈面试中常提到的乐观锁与悲观锁
  10. 关于Tomcat以及我是个小机灵鬼这回事