Mysql
taoy86
这个作者很懒,什么都没留下…
展开
-
Mysql 锁的测试
本文目的1、看一下gap对非唯一索引的阻塞2、on duplicate key update 死锁复现。 mysql 5.7.26 已经修复一、查看mysql引擎show engines ;show variables like '%storage_engine%' ;show variables like 'innodb_autoinc_lock_mode' ;set GLOBAL innodb_status_output_locks=ON;创建表CREAT...原创 2020-12-18 16:36:59 · 308 阅读 · 2 评论 -
详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
行锁在 InnoDB 中是基于索引实现的,所以一旦某个加锁操作没有使用索引,那么该锁就会退化为表锁。记录锁(Record Locks)顾名思义,记录锁就是为某行记录加锁,它封锁该行的索引记录:-- id 列为主键列或唯一索引列SELECT * FROM table WHERE id = 1 FOR UPDATE;复制代码id 为 1 的记录行会被锁住。需要注意的是:id 列必须为唯一索引列或主键列,否则上述语句加的锁就会变成临键锁。同时查询语句必须为精准匹配(=),不能为...转载 2020-12-10 15:40:51 · 1862 阅读 · 2 评论 -
论 MySql InnoDB 如何通过插入意向锁控制并发插入
前言在讲解之前,先来思考一个问题——假设有用户表结构如下:MySql,InnoDB,Repeatable-Read:users(id PK, name, age KEY)id name age 1 Mike 10 2 Jone 20 3 Tony 30 首先事务 A 插入了一行数据,并且没有 commit:INSERT INTO users SELECT 4, 'Bill', 15;复制代码随后事务 B 试图插入一行数据转载 2020-12-10 14:39:05 · 820 阅读 · 0 评论 -
详解 MySql InnoDB 中意向锁的作用
前言InnoDB 支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,而意向锁就是其中的一种表锁。意向锁(Intention Locks)需要强调一下,意向锁是一种不与行级锁冲突表级锁,这一点非常重要。意向锁分为两种:意向共享锁(intention shared lock, IS):事务有意向对表中的某些行加共享锁(S锁) -- 事务要获取某些行的 S 锁,必须先获得表的 IS 锁。SELECT column FROM table ..转载 2020-12-10 14:16:53 · 1655 阅读 · 0 评论 -
Mysql 锁
1.锁?1.1何为锁在计算机中的锁一般用来管理对共享资源的并发访问,比如我们java同学熟悉的Lock,synchronized等都是我们常见的锁。当然在我们的数据库中也有锁用来控制资源的并发访问,这也是数据库和文件系统的区别之一。小明接了一个需求,商家有个配置项,叫优惠配置项,可以配置买一送一,买一送二等等规则,当然这些配置是批量传输给后端的,这样就有个问题每个规则都得去匹配他到底是删除还是添加还是修改,这样后端逻辑就比较麻烦,聪明的小明想到了一个办法,直接删除这个商家的配置,然后全部添加进去转载 2020-12-09 16:48:04 · 325 阅读 · 0 评论 -
Show Profile
前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。1.分析步骤#1.开启Show Profile功能,默认该功能是关闭的,使用前需开启。show variables like 'profiling'set profiling=on; set profiling=off; show profile;#2.根据MySQL高级知识(十)——批量插入数据脚本转载 2020-10-21 14:44:53 · 244 阅读 · 0 评论 -
mysql 删除数据后物理空间未释放 索引信息中的列的信息说明
OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用OPTIMIZE TABLE 命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费。OPTIMIZE TABLE 命令只对 ..转载 2020-10-15 11:16:08 · 512 阅读 · 0 评论 -
group by与distinct效率分析及优化措施
mysql的distinct在结果集中,全部不同,才可以去重。所以,当我们进行去重处理的时候,需要单独对某列进行去重,可以使用group by子句进行分组去重select _auto_id from account_login group by _auto_id; 该语句可以对_auto_id列进行去重。在使用group by进行去重效率分析无索引0.23smysql> explain select _auto_id from account_login group by _aut转载 2020-10-14 21:58:37 · 1630 阅读 · 0 评论 -
MySQL分页查询优化
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。准备工作为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数据,最大为varcha转载 2020-10-13 18:22:32 · 125 阅读 · 0 评论 -
MySQL执行计划extra中的using index 和 using where; using index 的区别
转自:https://www.linuxidc.com/Linux/2017-08/146297.htm 侵删mysql执行计划中的extra列中表明了执行计划的每一步中的实现细节,其中包含了与索引相关的一些细节信息其中跟索引有关的using index 在不同的情况下会出现Using index, Using where Using index ,Using index condition等那么Using index 和 Using where;Using index有什么区别?网上搜了一大...转载 2020-10-12 20:48:10 · 1556 阅读 · 0 评论 -
SQL执行计划分析
解释ID列是一位数字,表示执行SELECT语句的顺序。id值相同执行顺序从上到下。id值不同时id值大的先执行。SELECT_TYPE这一列显示了对应行是简单还是复杂SELECT.取值如下:SIMPLE值意味着查询不包括子查询和UNION。查询有任何复杂的子部分,则最外层标记为PRIMARY.取值如下:TABLE输出数据行所在的表的名称PARTITIONS对于分区表,显示查询的分区ID,对于非分区表,显示为NULLTYPEEXTRA...转载 2020-10-12 21:06:40 · 386 阅读 · 0 评论 -
ON DUPLICATE KEY UPDATE
INSERT 中ON DUPLICATE KEY UPDATE的使用实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新在MySQL中也有这样的功能.INSERT 中ON DUPLICATE KEY UPDATE。如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,...转载 2019-08-02 11:11:39 · 330 阅读 · 0 评论 -
mysql ON DUPLICATE KEY UPDATE重复插入时更新
mysql当插入重复时更新的方法:第一种方法:示例一:插入多条记录假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:INSERT INTO clients(client_id,client_name,client_type)SELECT supplier_id,supplier_name,'advertising'FROM suppliers...转载 2019-04-15 22:15:32 · 1337 阅读 · 0 评论 -
Mysql 表备份 & update的字段来自另一张表
备份单张表:create table a ( id int auto_increment , name char(16), address char(128), primary key(id))insert into a(name,address) values ('aaa',null) , ('bbb',null)/* 先拷贝表结构, 再插入数...原创 2019-01-25 14:26:51 · 1386 阅读 · 0 评论 -
一种多层级机构数据库表设计的思路
在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序。这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询。level的设计原则:0.*.* 其中,0是顶级结构,第一个*是顶级结构下的结构,第二个*是顶级结构下的结构下的结构。举例:1、创建部门架构表:CREATE TABLE department ( `...转载 2018-10-31 14:21:58 · 8598 阅读 · 4 评论 -
MySQL- InnoDB锁机制
转自 https://www.cnblogs.com/aipiaoborensheng/p/5767459.htmlInnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题。下面我们先介绍一点背景知识,然后详细讨论InnoDB的锁问题。背景知识事务(Transaction...转载 2018-10-29 16:20:14 · 216 阅读 · 0 评论 -
Mysql有两种存储引擎:InnoDB与Myisam
六大区别: MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件。 文件的名字以表的名字开始,扩展名指出文件类型。 .frm 文件存储表定义。 .MYD (MYData)数据文件的扩展名为。 (MYIndex)索引文件的扩展名是.MYI 。 ...转载 2018-09-06 16:14:33 · 129 阅读 · 0 评论