我的数据库是5.7版本,我这里下载5.1.47的驱动了,当然如果你们的数据库是8.0以上的版本,那么就下相应的版本就行
MySQL 5.7 对比 5.6 有很多的变化。一个常见的需求:按条件分组后,取出每组中某字段最大值的那条记录。其实就是组内排序的问题,我的做法是:子查询先进行倒序排序,外层查询分组。
不知道大家是否有过维护的数据库表业务数据被人或者因为程序bug导致全表更新,全表删除的痛苦经历,恢复业务数据的过程真的太痛苦了,尤其与交易和钱相关的数据,必须恢复成和原来一模一样,那能不能在数据库层面架起最后一道安全堡垒,拒绝全表更新,全表删除的非法操作呢,答案是有的,在mysql中sql_safe_updates可以完美解决这个问题;
MySQL 是全球最受欢迎的开源数据库,长期位于 DB-Engines Ranking 排行榜第二名,在世界范围内拥有数量庞大的企业用户和开发者。然而,随着时间的推移,MySQL 用户正面临新挑战。Oracle 官宣将在 2023 年 10 月终止 MySQL 5.7 版本的官方技术支持。据第三方统计显示,目前仍有超过一半的 MySQL 服务器运行在 5.7 版本。在未来几个月,大量的 MySQL 实例必须升级至 8.0 及更高版本,否则将无法享受 Oracle 提供的技术支持和重要补丁更新,企业级用户将面临重大考验。
MySQL执行计划分析 Ⅰ、认识执行计划的每个字段 (root@localhost) [(none)]> desc select 1; +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+ | id | select_type | table | partitions | type | possible_keys |
在日常业务开发中,会通过使用where 1=1来简化动态 SQL语句的拼接,有人说where 1=1会影响性能,也有人说不会,到底会不会影响性能?本文将从 MySQL的官方资料来进行分析。
该文介绍了MySQL中表分区功能的使用,包括RANGE分区、LIST分区、HASH分区、KEY分区以及分区表的操作和优化。针对不同的分区类型,介绍了不同的应用场景和优缺点。同时,还提供了一些分区表SQL操作优化的建议。
explain为MySQL提供语句的执行计划信息。可以应用在select、delete、insert、update和place语句上。explain的执行计划,只是作为语句执行过程的一个参考,实际执行的过程不一定和计划完全一致,但是执行计划中透露出的讯息却可以帮助选择更好的索引和写出更优化的查询语句。
用过MYSQL的都会被别的数据库的operation 吐槽,索引的建立与使用方面的需要掌握的知识是比较“矫情的”。为什么这么说,在MYSQL 5.X中如果一个表中 有这样的索引,和这样的查询,索引的效率就会大打折扣。
最近说来惭愧,有开始说mysql 5.6 的问题了,是在是无奈有一个项目古老且XX,大批的在用MySQL 5.6 这个版本的数据库,之前并未进行管理,但基于Enterprise 的数据库都管理的还可以,所以这个项目也就到了手里,然后我们提出从5,6升级数据库版本的问题,并提出升级后的各种利好,但在升级过程中,我们遇到了升级后,又降级回去的问题,这里和各位说说为什么,以及我们疏忽了什么。
如果使用的 M 系列的 Mac 本的同学,需要找下支持 linux/arm64/v8 的版本。
(同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本)
在数据库中,对无索引的表进行查询或者有索引但是MySQL查询优化器不选择使用索引而进行的查询被称为全表扫描。如何判断当前某个
使用过Oracle、SQLServer数据库的降序索引的同学,可能在使用MySQL8.0之前版本时有个疑惑,明明我已经创建了将需要索引,但是为何执行时走不了索引或者效果不理想?
Hash Join作为表连接的基础连接类型,各大关系型数据库(譬如Oracle、sqlserver、Postgres等)很早都支持了Hash Join这种连接类型。作为关系型数据库领域的领袖,Oracle数据库支持三种主流的连接类型:Nested Loop Join、Hash Join 和 Sort Merge Join。而作为最流行的关系型数据库的MySQL 却一直没有支持Hash Join,这点一直为人诟病。千呼万唤始出来,MySQL 8.0.18开始终于支持了Hash Join的连接算法。MySQL 8.0 的所有新特性中,Hash Join 曾经最让我期待的一个新特性。
那既然隐式排序为什么还要保留Order by?隐式排序的目的又是什么呢?让我们一起来看看。
年前我们换了领导。俗话说,新官上任干总爱干傻事儿,这不,领导要拥抱新事物,要求我们更新项目MySQL版本,从MySQL5.7更新到MySQL8.0。不知是MySQL5.7不香了,还是领导你眼光高了?
索引下推是从 MySQL5.6 开始引入一个特性,英文是 index condition pushdown,一般简称为 ICP,索引下推通过减少回表的次数,来提高数据库的查询效率。
带着这两个问题找答案。接下来,我们先来看一下distinct和group by的基础使用。
本文主要参考官网的优化 https://dev.mysql.com/doc/refman/5.7/en/optimization.html
在MySQL中,可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。
最近看了很多阿里同学的MySQL文章,阿里内核同学的文章一言不合就上代码,不光让我们看到了结果,还能有代码可读,如果碰到了类似的问题,这样的解读确实是很难得的。 今天做了一个小的测试,发现MySQL 5.7中对于count(*)的处理好像有点霸道,没想象中那么好。 为了对比,我找了一套5.6的环境。 总体而言5.6的环境中对于count(*)的处理可塑性很强,很随和,你让我怎么查我就怎么查。初始数据为100万。 +----------+ | count(*) | +----------+
5.7以前,该项是explain partitions显示的选项; 5.7以后成为了默认选项.
MySQL 5.7中,我们创建了一张测试表t1,包含两个字段c1和c2,插入一些数据,如下所示,
ps:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符,超出报错
带着这两个问题找答案。接下来,我们先来看一下distinct和group by的基础使用。另外,如果你近期准备面试跳槽,建议在Java面试库小程序在线刷题,涵盖 2000+ 道 Java、MySQL 面试题,几乎覆盖了所有主流技术面试题。
爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。
MySQL 8.0 相对于 MySQL 5.7,有很多新特性,比如:快速加列、原子 DDL、不可见索引、额外端口、角色管理等。这一节内容,就不讲这些新特性了,只来聊聊最近在工作学习过程中遇到的几处细节上的差异。
本文将以MySQL 5.7 X Plugin为例,对比分析流水线(pipelining)和并行查询技术。 另一篇博文《MySQL 5.7 X Plugin支持异步查询》(Asynchronous Query Execution with MySQL 5.7 X Plugin),介绍了运行MySQL 5.7 X Plugin的方法: Hash分区 开放MySQL的CPU内核数连接 由于5.7 X Plugin只支持流水线技术(缩短往返延时),且不支持MySQL连接复用(MySQL在执行单项
此前我们介绍过 MySQL 性能优化的相关内容: Mysql Innodb 性能优化
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
数据库优化是一个很常见的面试题,下面就针对这一问题详细聊聊如何进行索引与sql的分析与优化。
在我们日常开发过程中,有时候因为对索引列进行函数调用,导致索引失效。举个例子,比如我们要按月查询记录,而当我们 表中只存时间,如果我们使用如下语句,其中create_time为索引列
根据官网的文档 https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html
最近来了一个项目,本身如果用MONGODB 有点大材小用,所以为了避免某些表继续使用text字段来处理JSON 数据的方式,让技术水平上一个档次,并且公司也不在上MYSQL 5.7 的新项目,全部是8.018这个版本。
| 作者 沈启超,19年硕士毕业于东南大学,目前在腾讯CSIG企业产品部担任后台开发,同时也参与公司内部存储开源组件MySync的开发。 ---- 前言:MySQL架构体系 首先分享实验前的基础知识,MySQL主要分为Server层与存储引擎层。 Server层主要包含连接器、检索内存、分析器、优化器、执行器等,所有跨存储引擎的功能均于这一层构建,例如存储过程、触发器、视图,函数等,有一个标准化的binglog日志模块。 存储引擎负责数据的存储与存取,使用可更换的插件式架构,拥有InnoDB、MyISA
https://dev.mysql.com/doc/refman/8.0/en/explain-output.html
在上章学习了42.QT-操作SQLite数据库后,发现MySQL和SQLite的语句都大致相同,所以本章只测试MySQL是否能使用
MySQL服务器可以在不同的SQL模式下运行,并且可以根据sql_mode系统变量的值对不同的客户端应用不同的模式。DBA可以设置全局SQL模式以匹配站点服务器操作需求,并且每个应用程序可以将其会话SQL模式设置为自己的需求。
上两篇文章分别介绍了MySQL8.0的相关的新特性《MySQL 8.0新特性:隐藏索引》和《MySQL 8.0新特性:隐藏字段》,本文继续介绍MySQL8.0的另一个相关的新特定性--降序索引;本文通过5.7和8.0进行对比说明;
今天来讲讲 MySQL 索引的相关问题,谈到索引,其实算是有个非常有深度的问题,本人才疏学浅,能力有限,理解不当之处,请各位大佬批评指正!不胜感激;
三歪最近发现我一直在写MySQL的文章,然后就跟我说他有sql用到like的时候就没办法用到索引了,问我怎么办。
EXPLAIN 工具能用于获取查询执行计划,即分析 MySQL 如何执行一个 SQL 语句。我们可以通过使用EXPLAIN 去模拟优化器执行 SQL 语句,从而分析 SQL 语句有没有使用索引、是否采用全表扫描方式、判断能否更进一步优化等。我们可以根据EXPLAIN 输出的数据来分析如何优化查询语句,提升查询语句的性能瓶颈。
MySQL Online DDL 功能从 5.6 版本开始正式引入,发展到现在的 8.0 版本,经历了多次的调整和完善。本文主要就 Online DDL 的发展过程,以及各版本的区别进行总结。其实早在 MySQL 5.5 版本中就加入了 INPLACE DDL 方式,但是因为实现的问题,依然会阻塞 INSERT、UPDATE、DELETE 操作,这也是 MySQL 早期版本长期被吐槽的原因之一。
EXPLAIN: 为 SELECT语句中使用到的每个表返回一条信息。它按照MySQL在处理语句时读取它们的顺序列出这些表。MySQL使用循环嵌套算法解析所有连接。意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表中找到匹配的行,等等。
今天下午在执行一个表结构变更的时候,出现了一个问题,拿着分析了分析,对于online-ddl又有了新的认识,这里写篇文章记录下。
数据库是程序员必备的一项基本技能,基本每次面试必问。对于刚出校门的程序员,你只要学会如何使用就行了,但越往后工作越发现,仅仅会写sql语句是万万不行的。写出的sql,如果性能不好,达不到要求,可能会阻塞整个系统,那对于整个系统来讲是致命的。
最近面试过程中问了MySQL的Explain的使用,问了:Explain你最关注哪些字段?
不久前用户反馈部门的 MySQL 数据库发生了数据更新丢失。为了解决这个问题,当时对用户使用的场景进行了分析。发现可能是因为用户在两台互为主从的机器上都进行了写入导致的数据丢失。
作者:胡呈清,爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:[简书 | 轻松的鱼],欢迎讨论。
领取专属 10元无门槛券
手把手带您无忧上云