MySQL
文章平均质量分 62
问明
胸藏文墨怀若谷,腹有诗书气自华
展开
-
《MySQL实战45讲》14 | count(*)这么慢,我该怎么办?
count(*) 的实现方式MyISAM 引擎把一个表的总行数存在了磁盘上,在执行无过滤条件的 count(*) 语句的时候会直接返回这个数,效率很高;InnoDB 引擎在执行无过滤条件的 count(*) 语句的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。count(*) 实现方式的优缺MyISAM 表虽然 count(*) 很快,但是不支持事务;show table status 命令虽然返回很快,但是不准确(通过采样实现);InnoDB 表直接 count(*) 会遍历原创 2021-12-09 09:50:28 · 260 阅读 · 0 评论 -
《MySQL实战45讲》13 | 为什么表数据删掉一半,表文件大小不变?
表数据存储位置参数 innodb_file_per_table控制了表数据的存储位置:设置为OFF时,表数据存放在系统的共享表空间,也就是和数据字典放在一起;不建议存放在共享表空间,即使表删除了,空间也不会被回收;设置为ON(MySQL 5.6.6开始,默认为ON)时,表数据存放在以.idb为后缀的文件中。存储在文件中更容易管理,通过drop table就可以删除表,且系统会直接删除该文件。数据删除流程记录的复用:适用于符合范围条件的数据。如表中存储着id为300、500、600的记录,删除原创 2021-12-03 09:42:50 · 534 阅读 · 0 评论 -
《MySQL实战45讲》12 | 为什么我的MySQL会“抖”一下?
“抖”的含义之前执行很快的SQL语句,偶尔会出现执行很慢,且很难复现,持续的时间很短。感觉就是数据库“抖”了一下。“抖”的原因名词解释脏页:内存数据页和磁盘数据页内容不一致时,称内存页为“脏页”;干净页:内存数据页和磁盘数据页内容一致时,称内存页为“干净页”;刷脏页(flush):内存的数据页写到磁盘的过程。触发刷脏页的情况redo log写满了,需要触发flush脏页,系统将不能接受更新操作,要尽量避免。内存不足MySQL系统空闲(无性能问题)MySQL正常关闭(无性能问题)原创 2021-12-01 09:36:44 · 118 阅读 · 0 评论 -
InnoDB特性—变更缓冲change buffer
一、简介change buffer是InnoDB存储引擎的一个重要特性,但在InnoDB 1.0.x版本之前,只支持插入缓冲(insert buffer),后来又对其进行升级,不仅支持insert buffer,还支持delete、update的缓冲,分别对应delete buffer、purge buffer,并统称为变更缓冲(change buffer)。结构:change buffer数据结构是一颗B+树;存储:位于缓冲池(buffer pool)中,存储在共享的表空间,默认是iddata1系原创 2021-11-26 22:40:44 · 1018 阅读 · 0 评论 -
《MySQL实战45讲》09 | 普通索引和唯一索引,应该怎么选择?
查询过程select id from T where k=5若k为普通索引:查找到满足条件的第一条记录后,依旧会继续查找下一条记录,直到查到不满足条件的记录为止;若k为唯一索引:查找到满足条件的第一条记录后,停止查找。因InnoDB是按照数据页为单位进行读写的。当k=5的记录都在一个数据页时,普通索引无非就是多做一次指针寻找和计算;当k=5的记录不在一个数据页时,会比唯一索引多一次读磁盘的操作,但不在一个数据页的情况微乎其微,可不考虑这种情况。故普通索引、唯一索引在查询过程中几乎一样。更原创 2021-11-24 10:07:41 · 610 阅读 · 0 评论 -
《MySQL实战45讲》08 | 事务到底是隔离的还是不隔离的?
一个可重复隔离级别的事务A,另一个可重复隔离级别的事务B,A要更新B锁住的行,此时A只能进入等待状态,等A获得行锁时,要更新的数据的值是什么呢?事务启动的两种方式一致性视图在执行第一个快照读语句时创建;一致性视图在执行start transaction with consistent snapshot 时创建。两种视图view视图:在执行查询语句时生成,为查询语句定义的虚拟表。一致性视图:InnoDB 在实现 MVCC使用的就是一致性读视图(consistent read view),用原创 2021-11-19 10:43:57 · 773 阅读 · 0 评论 -
《MySQL实战45讲》07 | 行锁功过:怎么减少行锁对性能的影响?
行锁是在存储引擎实现的,能够锁住行记录的锁。两阶段锁两阶段锁协议:在InnoDB事务中,行锁只有在需要的时候才加,在事务结束后才释放。当事务中需要锁多行时,将最可能造成锁冲突、最可能影响并发度的锁放在后面,减少锁的时间。死锁和死锁检测死锁:当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态。如:事务A需要用到事务B锁定的资源,而事务B又需要事物A锁定的资源,出现循环依赖,就会导致死锁。解决死锁的策略:直接进入等待状态,直至超时原创 2021-11-08 09:47:12 · 575 阅读 · 0 评论 -
《MySQL实战45讲》06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
全局锁对整个数据库实例加锁本文为《MySQL实战45讲》学习笔记原创 2021-11-05 10:06:02 · 175 阅读 · 0 评论 -
《MySQL实战45讲》05 | 索引
最左前缀原则建立联合索引时,会遵循从左到右依次匹配的原则。索引下推索引下推(Index Condition Pushdown,简称 ICP)是MySQL5.6做的优化,对使用最左前缀匹配原则下的索引中包含的字段进行优先判断,减少回表次数。如:mysql> select * from tuser where name like '张%' and age=10;本文为《MySQL实战45讲》学习笔记......原创 2021-11-03 09:36:31 · 185 阅读 · 0 评论 -
《MySQL实战45讲》03 | 事务隔离:为什么你改了我还看不见?
事物是在引擎层(并不是所有引擎都支持事物,如MyISAM就不支持事物)实现的,具有ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)特性,四种隔离级别(read uncommitted、read committed、repeatable read、serializable,即读未提交、读提交、可重复读、串行化),保证了一组数据库的操作,要么全部成功,要么全部失败。隔离性与隔离级别当数据库存在多个事物同时执行时,就会出现脏读原创 2021-11-01 09:49:49 · 117 阅读 · 0 评论 -
《MySQL实战45讲》02 | 日志系统:一条SQL更新语句是如何执行的?
一条更新SQL假设表T只有一个整形字段c和主键ID,当执行如下更新时发生了什么呢?mysql> update T set c=c+1 where ID=2;与查询过程类似,但更新操作涉及到两个日志:redo log和binlog。redo logredo log是InnoDB存储引擎特有的日志,每个InnoDB至少有一个重做日志文件组(group),且每个文件组下至少有两个重做日志文件,默认的两个重做日志文件为“ib_logfile0“和”ib_logfile1”。redo log条原创 2021-10-31 18:30:13 · 169 阅读 · 0 评论 -
《MySQL实战45讲》01 | 基础架构:一条SQL查询语句是如何执行的?
一条查询SQL表T只有一个字段ID,当执行如下查下时发生了什么?mysql> select * from T where ID=10;MySQL架构从架构图中可看出,MySQL分为两部分:Server层(连接器、查询缓存、优化器、执行器等)和存储引擎层(InnoDB、MyISAM、MEMORY等,InnoDB是MySQL 5.5.5之后默认的存储引擎)。连接器:负责与客户端建立连接、获取权限、维持和管理连接。查询缓存:建立连接后,可执行select语句。命中缓存则直接将结果返回给客原创 2021-10-28 22:02:24 · 140 阅读 · 0 评论 -
mysql大于、小于符号的两种表示方法
符号>>=<<=&'"方法一>>=<<=&'"方法二<![CDATA[ > ]]><![CDATA[ >= ]]><![CDATA[ < ]]><![CDATA[ <= ]]>&原创 2021-08-02 09:33:16 · 6059 阅读 · 0 评论 -
MySQL常见错误代码解析
常见的服务器错误代码及说明常见的客户端错误代码及说明转载 2020-07-17 09:44:09 · 191 阅读 · 0 评论 -
MySQL最详细学习教程(从入门到精通)
无意间发现了此宝藏,快读学习吧!!!! ➡️ 点此学习转载 2020-07-14 09:19:31 · 1320 阅读 · 0 评论 -
多级评论单表设计
https://blog.csdn.net/u013107634/article/details/89556973转载 2020-04-14 09:54:06 · 796 阅读 · 1 评论 -
判断sql语句是否使用索引及分析一条SQL的性能瓶颈
一. sql语句是否使用索引在查询语句前面加上explain操作解释我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:type结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquer...转载 2020-03-28 15:01:51 · 1627 阅读 · 0 评论 -
常用SQL总结(面试)
将控制台的输入存储到String[ ]中//控制台输入类型无要求public class GetIn { public static void main(String [] args) { Scanner in = new Scanner(System.in); //获取控制台的输入 String s = in.nextLine(); ...原创 2019-12-21 17:33:55 · 181 阅读 · 0 评论 -
索引的数据结构(Hash、B+Tree)
一. 索引的数据结构分类HashB+Tree二. Hash无序的Hash表【特点介绍】:虽然无序的Hash表可以快速的精确查询,但是不支持范围查询。若索引采用无序的Hash表,需扫描全部的数据,导致查询速度很慢;【使用场景】:等值查询,即Key—Value场景,如:Redis;有序的Hash表【特点介绍】:有序的Hash表适合查询静态数据。当进行增、删、改数据时候就会改...原创 2020-02-17 17:20:12 · 731 阅读 · 0 评论 -
索引介绍
一. 什么是索引? 索引是一个单独的、存储在磁盘上的数据结构。二. 为什么要使用索引? 可加快查询速度三. 索引的分类普通索引和唯一索引普通索引:允许在定义索引的列中插入重复值和空值;唯一索引:索引列的值必须唯一,但允许空值。单列索引和组合索引单列索引:只包含单个列;组合索引:多个字段组合创建的索引,遵循最左前缀匹配原则。全文索引(只有MyISAM支持此...原创 2020-02-02 15:02:46 · 269 阅读 · 0 评论 -
MySQL查询数据
一. 单表查询查询所有字段在select语句中用*通配符查询所有字段:select * from 表名;在select语句中指定所有字段:select 字段1,字段2,...,字段n from 表名查询指定字段查询单个字段:select 字段 from 表名查询多个字段:select 字段1,字段2,...,字段n from 表名查询指定记录select 字段1,字段2...原创 2020-01-31 22:44:38 · 243 阅读 · 0 评论 -
数据库存储引擎
一. 简介MySQL的核心即存储引擎,不同的存储引擎提供了不同的存储机制、索引技巧、锁定水平等,MySQL5.7支持的存储引擎有:InnoDB、MyISAM、Memory、Merge、Archive、Federated、CVS等,需针对不同的要求选择合适的存储引擎。查看MySQL支持的存储引擎:SHOW ENGINES查看MySQL默认存储引擎:SHOW VARIABLE LIKE 'st...原创 2020-01-28 12:51:03 · 134 阅读 · 0 评论 -
MySQL5.7新特性
支持JSONJSON是一种存储信息的格式,可较好的代替XML。MySQL5.7.8之前,只能用strings之类的通用形式来存储JSON文件,这样的缺陷是要自行确认和解析数据、解决更新中的困难、执行插入操作慢。性能和可扩展性改进了InnoDB的可扩展性和临床表现的性能。改进复制以提高可用性的性能改进复制:多源复制、多从线程增强、在线GTIDs和增强的半同步复制。安全...原创 2020-01-24 10:23:41 · 1495 阅读 · 0 评论