首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    insert语句的加锁情况分析

    // insert语句的加锁情况分析 // 今天分享的内容是MySQL里面insert语句的加锁情况,废话就不多说了,直接从线上的例子开始吧。...因此,为了避免这种情况发生,MySQL会在session 1中对表t添加了(-无穷,1]之间的next-key锁,来避免session2的insert语句并发插入。...语句执行完成之后才释放自增锁; b、当该值为1的时候,普通的insert语句,自增锁在申请之后马上释放,insert into select语句,自增锁还是要等语句结束之后才释放 c、该值为2的时候,所有的申请自增主键的动作都是申请完成之后就释放锁...之所以对insert into select语句单独处理,是因为这种语句"预先不知道要申请多少个id",如果我们要select的表有1000w行记录,那么要做1000w次的申请自增id的动作。...MySQL认为这是欠妥当的,因此,对这种批量insert语句,包括load data等,它在内部做了一个自增值生成策略的优化: 1、批量执行的insert语句,第一次申请1个自增id 2、一个id用完了

    2.3K21

    Mysql Join语句的优化

    尽可能减少Join语句中Nested Loop的循环总次数 最有效的办法是让驱动表的结果集尽可能地小,这也正是在本章第二节中所提到的优化基本原则之一——“永远用小结果集驱动大结果集” 比如,当两个表(表...优先优化Nested Loop的内层循环 不仅在数据库的Join中应该这样做,实际上在优化程序语言时也有类似的优化原则。...保证Join语句中被驱动表的Join条件字段已经被索引 其目的正是基于上面两点的考虑,只有让被驱动表的Join条件字段被索引了,才能保证循环中每次查询都能够消耗较少的资源,这也正是内层循环的实际优化方法...当无法保证被驱动表的Join条件字段被索引且内存资源充足时,不要太吝惜Join Buffer的设置 在Join是All、Index、range或index_merge类型的特殊情况下,Join Buffer...在这种情况下,Join Buffer的大小将对整个Join语句的消耗起到非常关键的作用

    2K60

    34 | join语句的使用

    idata; delimiter ;; create procedure idata() begin declare i int; set i=1; while(i<=1000)do insert...在这个语句里,t1 是驱动表,t2 是被驱动表。 explain的结果: ? 在这条语句里,被驱动表 t2 的字段 a 上有索引,join 过程用上了这个索引。...结论: 使用 join 语句,性能比强行拆成多个单表执行 SQL 语句的性能要好; 如果使用 join 语句的话,需要让小表做驱动表。...结论: 以上两种算法是由能否使用被驱动表的索引决定的。而能否用上被驱动表的索引,对 join 语句的性能影响很大。...如果可以使用被驱动表的索引,join 语句还是有其优势的; 不能使用被驱动表的索引,只能使用 Block Nested-Loop Join 算法,这样的语句就尽量不要使用; 在使用 join 的时候,应该让小表做驱动表

    80820

    MySQL中的join语句

    MySQL中的join语法 在MySQL中,join语句想必大家都不陌生,今天我们围绕join语句展开,说一些可能平时不关注的知识点。...整个join语句的执行过程如下: a、从表t1中拿到一条记录的字段a值 b、拿a的值去t2表中查找,查找匹配的行 c、找到结果,和表t1中的行拼接成一行记录,作为结果的一条记录 d、重复以上三个步骤,直到...这里,我们简单推一下复杂度的公式: 假设驱动表的记录为M,被驱动表的值是N,因为被驱动表使用了索引,在一棵b+树上索引的查找效率近似logN,因为我们的语句时select * ,要牵扯到回表到聚集索引查询所有字段...不同的地方在于: 1、BNLJ算法会将驱动表t1的记录先放在join buffer中,然后从t2上一条一条获取记录,和join buffer中的记录匹配,找到符合条件的记录放入结果集; 2、如果join...在我们使用BNLJ的时候,如果join buffer比较小,那么被驱动表就会访问多次,join buffer越大,那么被驱动表的扫描次数就越少,join的性能就越高。

    2.1K10

    insert 语句加锁机制

    T_T 二 基础知识 在分析死锁案例之前,我们先学习一下背景知识 insert 语句的加锁策略,来看看官方定义: "INSERT sets an exclusive lock on the inserted...我们构造一个已经存在的记录c2=19 ,然后删除记录c2=19,在其他会话插入相同的记录。 通过这样的逻辑来测试insert 语句遇到唯一键的时候的加锁流程。...not gap waiting ,说明insert 插入完成之后 持有一把c2=19 的行锁 五 总结insert流程 insert N的流程(非唯一索引的情况): 找到大于N的第一条记录M 如果M上面没有...(1) 我们从时间线维度分析: T1: insert into t7(id,a) values(26,10) 语句insert 成功,持有a=10 的X 行锁(X locks rec but not...T3: insert into t7(id,a) values(40,9)该语句插入的a=9的值在T1申请的gap锁(4,10]之间,Gap lock 阻塞insert intention lock,故要等待

    3.2K30

    join 语句怎么优化?

    Simple Nested-Loop Join 我们来看一下当进行 join 操作时,mysql是如何工作的。常见的 join 方式有哪些?...,叫做 join buffer,我们可以执行如下语句查看 join buffer 的大小 show variables like '%join_buffer%' 把我们之前用的 single_table...语句,MySQL优化器可能会选择表 t1 或者 t2 作为驱动表,这样会影响我们分析sql语句的过程,所以我们用 straight_join 让mysql使用固定的连接方式执行查询 select *...join buffer,只有查询列表中的列和过滤条件中的列才会被放入 join buffer,因此我们不要把 * 作为查询列表,只需要把我们关心的列放到查询列表就好了,这样可以在 join buffer...当然这个结论的前提是可以使用被驱动表的索引」 「总而言之,我们让小表做驱动表即可」 「当 join 语句执行的比较慢时,我们可以通过如下方法来进行优化」 进行连接操作时,能使用被驱动表的索引 小表做驱动表

    1.3K20

    insert into 语句的四种写法

    【特注】当 id 为自增,即 id INT PRIMARY KEY AUTO_INCREMENT 时,执行 insert into 语句,需要将除 id 外的所有 field 列举出来(有没有感觉,好不方便...方式3.1、 INSERT INTO t2(field1,field2) SELECT colm1,colm2 FROM t1 WHERE …… 这里简单说一下,由于可以指定插入到 talbe2 中的列...,以及可以通过相对较复杂的查询语句进行数据源获取,可能使用起来会更加的灵活一些,但我们也必须注意,我们在指定目标表的列时,一定要将所有非空列都填上,否则将无法进行数据插入,还有一点比较容易出错的地方就是...,当我们写成如下简写格式: 方式3.2、 INSERT INTO t2 SELECT colm1,colm2,…… FROM t1 此时,我们如果略掉了目标表的列的话,则默认会对目标表的全部列进行数据插入...(参考:mysql数据库中插入数据INSERT INTO SET的优势) 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159651.html原文链接:https:

    76530

    Insert into select语句引发的生产事故

    [insert_into_select_accident_header.jpg] 前言   Insert into select请慎用。...出现的原因   在默认的事务隔离级别下:insert into order_record select * from order_today 加锁规则是:order_record表锁,order_today...[explain_result_no_index.png]   通过观察迁移sql的执行情况你会发现order_today是全表扫描,也就意味着在执行insert into select from 语句时...tableB语句时,一定要确保tableB后面的where,order或者其他条件,都需要有对应的索引,来避免出现tableB全部记录被锁定的情况。...参考文章 insert into ... select 由于SELECT表引起的死锁情况分析 结尾   如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦

    2.2K11
    领券