![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 60
阿东-007
专注技术
展开
-
MySQL 共享锁 (lock in share mode),排他锁 (for update)
mysql 共享锁 (lock in share mode)允许其它事务也增加共享锁读取不允许其它事务增加排他锁 (for update)当事务同时增加共享锁时候,事务的更新必须等待先执行的事务 commit 后才行,如果同时并发太大可能很容易造成死锁共享锁,事务都加,都能读。修改是惟一的,必须等待前一个事务 commit,才可以事务之间不允许其它排他锁或共享锁读取,修改更不允许所有事务中有一个排他锁执行 commit 之后,其它事务才可执行不允许其它事务增加共享或排他锁读取。原创 2023-02-13 15:03:07 · 706 阅读 · 0 评论 -
什么是覆盖索引
覆盖索引原创 2022-09-04 16:41:07 · 246 阅读 · 0 评论 -
什么情况下考虑分库分表
什么情况考虑分库分表原创 2022-07-05 12:57:41 · 1304 阅读 · 0 评论 -
联合索引ABC的几种索引利用情况
联合索引ABC的几种索引利用情况原创 2022-07-05 12:25:15 · 1160 阅读 · 0 评论 -
sql优化——count(1)、count(*)与count(列名)的区别
一、从执行效果来看1.count(1) and count(*):基本没差别,都是求表的总行数count(*)包括了所有的列,相当于求记录总行数,在统计结果的时候,不会忽略NULL2. count(1) and count(列名):(1) count(1) 会统计表中的所有的记录数,不会忽略NULL,包含字段为null 的记录(2) count(列名) 会统计该列字段在表中出现的次数,会忽略字段为null 的情况,即不统计字段为null 的记录。二、从执行效率来看若列名为主键,count(列原创 2022-05-19 18:27:52 · 513 阅读 · 0 评论 -
不可重复读和幻读如何解决
详细参考:https://tech.meituan.com/2014/08/20/innodb-lock.html个人总结:一、什么是不可重复读和幻读RC隔离级别为读已提交,解决了不可提交问题,但是会出现不可重复读和幻读问题RR隔离级别为不可重复读,解决不可重复读和幻读的问题,不可重复读重点在于update和delete,而幻读的重点在于insert二、不可重复读和幻读如何解决快照读的不可重复读和幻读-mvcc 解决当前读的不可重复读和幻读-Next-Key锁(行锁和GAP(间隙锁)的合并)解原创 2022-04-10 17:35:14 · 509 阅读 · 0 评论 -
mysql索引汇总
何为索引?有什么作用?索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash。索引的作用就相当于目录的作用。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。一、索引的优缺点优点 :使用索引可以大大加快 数据的检索速度(大大减少检索的数据量), 这也是创建索引的最主要的原因。通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。原创 2022-03-18 00:28:11 · 989 阅读 · 0 评论 -
LIKE前后置%+复合索引的索引使用情况
首先建表create table test03(id int primary key not null auto_increment,c1 varchar(10),c2 varchar(10),c3 varchar(10),c4 varchar(10),c5 varchar(10)); insert into test03(c1,c2,c3,c4,c5) values ('a1','a2','a3','a4','a5');insert into test03(c1,c2,c3,c4,c5原创 2022-03-14 21:25:29 · 666 阅读 · 0 评论 -
MySQL联合索引(abc)命中规则
1.建表mysql创建一张表,表名:‘test_models’id列为 主键,int类型 ,自增a,b,c,d,e 全部是int(11)为(a,b,c)添加一个联合索引 index_abc执行语句:CREATE TABLE `test_models` (`id` INT(11) NOT NULL AUTO_INCREMENT, `a` INT(11) DEFAULT NULL, `b` INT(11) DEFAULT NULL, `c` INT(11) DEFAULT NULL,原创 2022-02-23 18:20:00 · 5960 阅读 · 0 评论 -
mysql中explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。(QEP:sql生成一个执行计划query Execution plan)expain出原创 2022-02-23 15:36:10 · 517 阅读 · 0 评论 -
MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?(最终版)
1. 可重复读的疑惑事务的隔离级别定义了数据库系统中一个事务中操作的结果在何时以何种方式对其他并发事务操作可见。SQL标准中定义的4种隔离级别(未提交读、已提交读、可重复读、可串行化)中,只有2种(已提交读-RC、可重复读-RR)会被使用,RC是为了解决“脏读”问题 ,RR则是为了解决“不可重复读”问题。其中,“脏读”问题一般是不可容忍的,那么“不可重复读”问题呢?很多时候,所谓的”不可重复读“问题其实是完全可接受的。如果“不可重复读”是一个伪问题,那么MySQL中的”可重复读“这种隔离级别存在的原创 2022-01-21 11:43:14 · 1049 阅读 · 2 评论 -
explain 的type类型的理解
type类型解释null–systemconst的特例,仅返回一条数据的时候const查找主键索引,返回的数据至多一条(0或者1条),属于精确查找eq_ref查找唯一性索引,返回的数据至多一条(0或者1条),属于精确查找ref查找非唯一性索引,返回匹配某一条件的多条数据,数据返回可能是多条,属于精确查找range查找某个索引的部分索引,一般在where子句中使用 < 、>、in、between等关键词,只检索给定范围的行,属于范围查找...原创 2022-01-13 15:01:35 · 1199 阅读 · 0 评论 -
select * 和select 所有字段的区别
MySQL 5.1.37表记录数41,547,002,即4000w行使用远程客户端取1000条数据,统计时间:SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;时间2.218s,网络消耗0.547sSELECT id, appid, aop, t, uid, sid, pid, pname, bid, bname, ptype, sm, sv, bt, national, area, ov FROMdmsp.dmsp_dimension原创 2022-01-13 11:16:09 · 1521 阅读 · 0 评论 -
透彻理解联合索引(a,b,c)
用到索引的有a,ab,abc,ac 因为优化器会自动调整and前后的顺序,所以ba,cba,bca,ca都会用到索引,其他的都不会用到该索引。ac这一组仅仅是a用到索引。组合索引 有“最左前缀”原则,遇到范围查询(>、<、between、like)就会停止匹配。为什么是“最左匹配”原则,可以通过数据结构来看:联合索引是一颗b+树(a,b)a按顺序排列,b在a确定的情况下按顺序排列。所以必须基于a来查找后面的b字段,否则b就是无序的,就用不到索引了。...原创 2021-12-29 17:42:07 · 4981 阅读 · 0 评论 -
mysql const与eq_ref的区别
简单地说是const是直接按主键或惟一键读取,eq_ref用于联表查询的状况,按联表的主键或惟一键联合查询。const该表最多有一个匹配行, 在查询开始时读取。因为只有一行, 所以该行中列的值能够被优化器的其他部分视为常量。const 表很是快, 由于它们只读一次。sqlconst用于将 “主键” 或 “惟一” 索引的全部部分与常量值进行比较。在下面的查询中, tbl_name 能够用做 const 表:postSELECT * FROM tbl_name WHERE primary_key=1;原创 2021-12-29 15:33:49 · 5060 阅读 · 0 评论 -
Mysql执行计划
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。explain执行计划包含的信息这里写图片描述其中最重要的字段为:id、type、key、rows、Extra各字段详解idselect查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序三种情况:1、id相同:执行顺序由上至下这里写图片描述2、id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行这里写图原创 2021-12-28 14:08:29 · 124 阅读 · 0 评论 -
MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?
我之前写过一篇文章《为什么MySQL选择REPEATABLE READ作为默认隔离级别?》介绍过MySQL 的默认隔离级别是 Repeatable Reads以及背后的原因。主要是因为MySQL在主从复制的过程是通过bin log 进行数据同步的 ,而MySQL早期只有statement这种bin log格式,这种格式下,bin log记录的是SQL语句的原文。当出现事务乱序的时候,就会导致备库在 SQL 回放之后,结果和主库内容不一致。为了解决这个问题,MySQL默认采用了Repetable Rea原创 2021-12-02 15:46:17 · 133 阅读 · 0 评论 -
联合索引最左匹配原则
什么时候创建组合索引?当我们的where查询存在多个条件查询的时候,我们需要对查询的列创建组合索引为什么不对每一列创建索引减少开销覆盖索引效率高减少开销:假如对col1、col2、col3创建组合索引,相当于创建了(col1)、(col1,col2)、(col1,col2,col3)3个索引覆盖索引:假如查询SELECT col1, col2, col3 FROM 表名,由于查询的字段存在索引页中,那么可以从索引中直接获取,而不需要回表查询效率高:对col1、col2、col3三列分别创原创 2021-11-04 10:30:40 · 455 阅读 · 0 评论 -
MySQL缓存机制
1. MySQL缓存简介MySQL缓存机制说明MySQL缓存机制即缓存sql 文本及缓存结果,用KV形式保存再服务器内存中,如果运行相同的sql,服务器直接从缓存中去获取结果,不需要再去解析、优化、执行sqlMySQL缓存失效在表的结构或数据发生改变时,查询缓存中的数据不再有效,查询缓存值的相关条目将被清空INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效使用场景对于频繁更新的表,原创 2021-09-28 10:30:30 · 3707 阅读 · 0 评论 -
MySQL 架构分析
一 MySQL 基础架构分析1.1 MySQL 基本架构概览下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。先简单介绍一下下图涉及的一些组件的基本作用帮助大家理解这幅图,在 1.2 节中会详细介绍到这些组件的作用。**连接器:**身份认证和权限相关(登录 MySQL 的时候)。**查询缓存:**执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。分析器: 没有命中缓存的话,SQL 语句就原创 2021-09-27 23:31:27 · 121 阅读 · 0 评论