07MySQL
文章平均质量分 74
07MySQL
专注_每天进步一点点
成为健康快乐长寿有价值的人,拥有明亮灵动的眼睛,平静谦和的微笑。
展开
-
023 MySQL索引优化口诀-索引失效的常见情况
索引优化总结口诀:全值匹配我最爱,最左前缀要遵守;带头大哥不能死,中间兄弟不能断;索引列上少计算,范围之后全失效;like 百分写最右, 覆盖索引不写 * ;不等控制还有or,索引失效要少用;var引号不能丢, sql 高级也不难;1、全值匹配 :对索引中所有列都指定具体值。该情况下,索引生效,执行效率高2、最左前缀:又叫做最左匹配原则,最左匹配原则是和MySQL的InnoDB存储引擎的B+Tree的数据结构紧密关联的,可以去看这几篇博客:第1篇:MySQL的InnoDB存储引擎中.原创 2022-05-23 17:02:03 · 561 阅读 · 0 评论 -
如何同时修改数据库中两个表数据,并保证两次修改同时成功或者失败
让我们来思考,在什么情况下会出现需要同时修改连个表的操作?如何同时修改数据库中两个表数据,并保证两次修改同时成功或者失败。假如:A表收入表、B表为商品售出记录表,每卖一件商品,B创建一条出售记录,A根据B的主键创建一条收入信息,A表为的外键是B表的主键,售出一件商品,正确操作应该是:创建B表的一条数据,表示有商品售出,然后A表创建一条数据,表示收钱了,那么如果,B表插入数据成功,但是A表插...转载 2019-04-12 15:35:23 · 12249 阅读 · 2 评论 -
24个经典的MySQL索引问题,你都遇到过哪些?
索引1、什么是索引?2、索引有哪些优缺点?3、索引使用场景(重点)4、索引有哪几种类型?5、索引的数据结构(b树,hash)6、索引的基本原理7、索引算法有哪些?8、索引设计的原则?9、创建索引的原则(重中之重)10、创建索引的三种方式,删除索引11、创建索引时需要注意什么?12、使用索引查询一定能提高查询的性能吗?为什么13、百万级别或以上的数据如何删除14、前缀索引15、什么是最左前缀原则?什么是最左匹配原则16、B树和B+树的区别17转载 2020-06-04 16:45:06 · 311 阅读 · 0 评论 -
022 由MySQL的Buffer Pool想到的LRU算法用在哪些地方,LRU算法如何实现
1.什么是LRU算法?LRU是一种缓存淘汰机制策略。LRU缓存淘汰算法就是一种常用策略。LRU的全称是Least Recently Used,也就是说我们认为最近使用过的数据应该是有用的,很久都没用过的数据应该是无用的,缓存满了就优先删除那些很久没有用过的数据。计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新的内容腾位置。但是要删除哪些内容呢?我们肯定希望删掉那些没有用的缓存,而把有用的数据继续留在缓存中,方便之后继续使用。那么,什么样的数据我们可以判定为有用的数据呢?2、 LRU用原创 2022-04-01 10:54:56 · 348 阅读 · 0 评论 -
这篇 MySQL 索引和 B+Tree 讲得太通俗易懂
正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:create table user( id bigint not null comment 'id' primary key, name varchar(200) null comment 'name', age bigint null comment 'age', gender int null comment '转载 2021-02-22 14:22:32 · 199 阅读 · 0 评论 -
021 MySQL 的 InnoDB 存储引擎怎么设计的?从Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer和Doublewrite说
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等上一讲给大家介绍了 MySQL 中的两个成员 binlog 和 redo log。然而,这只是 MySQL 家族里的两个小喽啰,Mysql 可以做到高性能高可靠,靠的绝对不只有他们俩。MySQL 里还有什么其他成员呢?对于 MySQL,要记住、或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图:MySQL 架构in转载 2022-03-31 17:05:59 · 197 阅读 · 0 评论 -
020 MySQL中Redo Log、The Binary Log和2阶段提交
假设你执行了一条 sql 语句:update user set age = 18 where user_id = 345981MySQL 会直接去磁盘修改数据吗?明显不会,磁盘IO太慢了,如果每个请求过来 MySQL 都要写磁盘,磁盘肯定扛不住。那就写内存?把数据从磁盘load到内存,然后修改内存里的数据。也不行,万一掉电了,内存就没了,数据就再也找不回来了。这其实是很多中间件都会遇到的问题,一个中间件做的再怎么分布式,怎么高可靠,都会遇到这个问题:数据来了,写磁盘,还是写内存转载 2022-03-31 11:12:23 · 225 阅读 · 0 评论 -
019 MySQL索引下推(高于5.6的版本,对索引中包含的字段先进行过滤,减少回表次数,提升性能)
1、回表操作对于数据库来说,只要涉及到索引,必然绕不过去回表操作。这是理解索引下推的基础。说到回表,我们需要从索引开始说起。这里只是简单讲下主键索引与普通索引,目的是让大家对回表操作有个认识。这里我们只以 Innodb 存储引擎作为讲解对象。1.1 主键索引主键索引在底层的数据存储是通过 B+ 树来实现的。简单来说,就是除叶子节之外的其他节点都存储的是主键值。而叶子节点上存储的是整行的数据。大体结构如下图所示1.2 非主键索引除了主键索引外,其它的索引都被...原创 2022-03-29 14:56:04 · 154 阅读 · 0 评论 -
018 通俗易懂解释MySQL的回表
讲到MySQL中的回表就不得不提主键索引和非主键索引。1、对于下面这个表,ID是主键(主键索引,或称为聚簇索引),k字段上创建非主键索引(二级索引)2、主键索引和非主键索引的数据结构示意图如下其中R代表一整行的值。从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。1、如果查询语句是 se原创 2022-03-29 11:13:22 · 1079 阅读 · 0 评论 -
017 MySQL中为什么选择B+Tree这种结构存储索引,从操作系统的磁盘块(block)和InnoDB存储引擎的页(Page)的概念说起
1、操作系统的磁盘块(block)操作系统从磁盘读取数据到内存是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多原创 2022-03-28 18:02:13 · 1674 阅读 · 0 评论 -
016 MySQL中B+Tree,从二叉树、平衡二叉树、B-Tree讲起
MySQL中的索引,以 B+Tree 索引用得最多,B+Tree 索引是 B+Tree 在数据库的一种实现。B+Tree 中的B代表平衡(balance),而不是二叉(binary),因为 B+Tree 是从 “平衡二叉树” 再经过 “B树(B-Tree)” 一步步演化而来的。在讲 B+Tree 之前必须先了解二叉树、平衡二叉树(AVL Tree)和平衡多路查找树(B-Tree)。(1)二叉树(Binary Search Trees,二叉查找树);(2)平衡二叉树(或者叫AVL Tree),是1原创 2022-03-26 23:47:41 · 2912 阅读 · 0 评论 -
015 MySQL 中 limit 分页偏移量过大导致查询慢的优化
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等1、简单回顾MySQL中的 limit 的用法假如你的需求是:从第几条开始总共返回多少条。这时候你将会用到MySQL中的limit。语法:SELECT * FROM table LIMIT [offset,] rowsmysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15//为了检索从某一个偏移量到记录集的结束所有原创 2022-03-25 17:28:50 · 2449 阅读 · 0 评论 -
014 MySQL官网 术语汇编/难词汇编(glossary)中的B+Tree解释
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等B+Tree,直接看官网,点我B-tree(从技术上来说,实际上是B+Tree,切记!!!) A tree data structure that is popular for use in database indexes. The structure is kept sorted at all times, enabling fast lookup for exac原创 2022-03-24 17:36:37 · 740 阅读 · 0 评论 -
013 到MySQL官网去看聚簇索引(clustered index)
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等1、MySQL官网的难词汇编(glossary)中的聚簇索引(clustered index)的解释MySQL官网glossary中的clustered index解释的网址,点我呀clustered indexThe InnoDB term for a primary key index. InnoDB table storage is organized based on原创 2022-03-24 15:51:19 · 576 阅读 · 0 评论 -
012 通俗易懂解释MySQL聚簇索引和非聚簇索引
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等MySQL的InnoDB(存储引擎)索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行(可以理解为一行数据),普通索引的叶子节点的值存储的是主键值(只有个主键),这是了解聚簇索引和非聚簇索引的核心。1、什么是聚簇索引?通俗解释:找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,其中主键索引就是聚簇索引。2、什么是非聚簇索引?索引的存储和数据的存储原创 2022-03-24 14:54:53 · 477 阅读 · 0 评论 -
011 索引的优点,特大型的表考虑分区技术
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等原创 2022-03-24 10:38:29 · 1369 阅读 · 0 评论 -
010 MySQL之哈希索引(hash index)那么快,为什么很少使用(特定场合才用)
1、哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行的速度很快,所以大部分情况下这一点对性能的影响并不明显。2、哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。3、哈希索引也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。例如,在数据列(A,B) 上建立哈希索引,如果查询只有数据列A,则无法使用该索引。4、哈希索引只支持等值比较查询,包括=、IN()、<=> (注意<>原创 2022-03-23 14:37:50 · 283 阅读 · 0 评论 -
009 MySQL中B+Tree对索引列是顺序存储的,适合查找范围数据,匹配原则
1、多列数据的key(索引)的数据是如何存储的CREATE TABLE People( last_name varchar(50) not null, first_name varchar(50) not null, dob date not null, gender enum('m','f') not null, key(last_name,first_name,dob));在MySQL中建立上面一张表,原创 2022-03-23 14:09:54 · 489 阅读 · 0 评论 -
008 MySQL的InnoDB存储引擎中的索引用B+Tree
1、索引的概念(快速找到记录的一种数据结构)索引(在MySQL中也叫做“键(key)") 是存储引擎用于快速找到记录的一种数据结构。mysql> SELECT first_ name FROM sakila.actor WHERE actor_ id = 5;如果在actor_ id列上建有索引,则MySQL将使用该索引找到actor_ id为5的行,也就是说,MySQL先在索引上按值进行查找,然后返回所有包含该值的数据行。索引可以包含一个或多个列的值。如果索引包含多个列,那么列的顺序原创 2022-03-23 10:49:34 · 638 阅读 · 0 评论 -
007 MySQL中的InnoDB存储引擎概览
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等InnoDB是MySQL的默认存储引擎,这个存储引擎是值得花时间深入研究的。InnoDB的数据存储在表空间(tablespace) 中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成。在MySQL 4.1 以后的版本中,InnoDB 可以将每个表的数据和索引存放在单独的文件中。InnoDB也可以使用裸设备作为表空间的存储介质,但现代的文件系统使得裸设备不再是必要的原创 2022-03-22 15:38:52 · 583 阅读 · 0 评论 -
006 MySQL 监控
原文地址:MySQL 监控原创 2022-03-18 17:17:10 · 945 阅读 · 0 评论 -
005 在Mysql中,事务是如何实现的呢?
hello大家好,我是一个爱看底层的小码,对于每一个学习mysql数据库的同学来说,事务都是一个绕不开的话题,简单的说来事务是指访问并可能更新数据库中各项数据项的一个程序执行单元。事务的四个特征无非就是老生常谈的原子性,一致性,隔离性和持久性。可是如果真的去深究事务的实现原理,你们真的理解吗? 在我看来,一个正常的事务要达到怎么样的效果呢?或者说哪些是它最重要的点呢?无非是可靠和并发处理。 详细的说,可靠就是指数据库在执行crud操作(主要是c和u)时抛出异常或者数据库crash(崩溃)时需要保转载 2022-03-18 16:37:26 · 3901 阅读 · 2 评论 -
004 MySQL的4种隔离级别,通俗易懂小例子验证
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等上篇文章说了“事务”的基本概念。1、这一篇开始讲讲MySQL的4隔离级别。(1)READ UNCOMMITTED(未提交读)在READ UNCOMMITTED级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务读到未提交的数据,这被称为脏读。实际应用中很少使用。(2)READ COMMITTED(提交读)大多数数据库系统的默认隔离级别都是 READ COMM原创 2022-03-18 15:11:15 · 463 阅读 · 1 评论 -
003 MySQL隔离级别,从事务开始讲起1
1、事务通俗易懂的解释:多条语句(操作)要么全部执行成功,要么全部执行失败。要么“全部执行失败”再解释下:假设总共4条语句,只要有其中1条执行失败了,那么就判定为“全部执行失败”。失败时,4条语句中已经执行成功的需要恢复成未执行这4条语句原来的样子。举个例子:假设某银行的数据库中有2张表,支票(checking)表和储蓄(savings)表。小明(customer_id=12345)要从他的支票账户往他的储蓄账户转100元钱,那么需要三个步骤:(1)检查小明的支票账户余额是否大于100元;(原创 2022-03-18 13:51:35 · 590 阅读 · 0 评论 -
002 MySQL并发控制简介
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等MySQL中里面有一张张的数据库表,表里面有一条条的数据。对于这些数据的读写问题,对于同一条数据,可以同时读,但是不能同时修改。你想想,要是允许多个线程同时修改,那肯定是乱成一锅粥。所以MySQL中引入了读锁、写锁,也叫共享锁、排它锁。MySQL中同样有表锁和行级锁。服务器在执行ALTER TABLE之类的语句时会使用表锁,行级锁只在存储引擎层实现,而MySQL服务层没有实现。服务器原创 2022-03-17 16:37:27 · 398 阅读 · 0 评论 -
001 MySQL的3层逻辑架构
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等(1)最上层的服务是连接/线程处理,很多基于网络的客户端/服务器的工具都有类似的架构。这一层用来做连接处理、授权认证、安全等。MySQL服务器上维护了一个线程池/连接池,避免为每个连接都创建销毁一个线程。线程用来处理客户端的请求/连接。(2)第二层,MySQL的核心服务都在这一层。查询解析(解析成MySQL内部数据结构“解析树”)、分析、优化(比如重写查询,表的读写顺序,使用原创 2022-03-17 15:50:31 · 516 阅读 · 1 评论 -
001 MySQL之间隙锁 之 官网解释
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册Gap LocksA gap lock is a lock on a gap between index records, or a lock on the gap before the first or after the last index record. For example, SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE; prevents other tra原创 2022-03-17 09:03:05 · 496 阅读 · 0 评论 -
001 在MySQL中详解一条 SQL 的执行过程
在MySQL中详解一条 SQL 的执行过程天天和数据库打交道,一天能写上几十条 SQL 语句,但你知道我们的系统是如何和数据库交互的吗?MySQL 如何帮我们存储数据、又是如何帮我们管理事务?....是不是感觉真的除了写几个 「select * from dual」外基本脑子一片空白?这篇文章就将带你走进 MySQL 的世界,让你彻底了解系统到底是如何和 MySQL 交互的,MySQL 在接受到我们发送的 SQL 语句时又分别做了哪些事情。MySQL 驱动 我们的系统在和 MySQL 数据库转载 2022-03-09 16:57:52 · 136 阅读 · 0 评论