首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 核心模块揭秘 | 05 期 | 读事务和只读事务的变形记

在 update 或 delete 语句执行过程中,读事务就会变成读写事务。 发生变化的具体时间点,又取决于这两类 SQL 语句更新或删除记录的第一个表是什么类型。...如果第一个表是用户临时表,因为它的可见范围只限于创建这个表的数据库连接之内,其它数据库连接中执行的事务都看不到这个表,更不能改变表中的数据,所以,update、delete 语句改变用户临时表中的数据,...有一点需要说明,改变用户临时表的数据触发读事务变成读写事务,不会分配用户临时表回滚段,需要等到为某个用户临时表第一次写 Undo 日志时才分配。 第二类:第一条 SQL 语句是 select。...在 select 语句执行过程中,不会分配事务 ID 和用户临时表的回滚段;这条 SQL 执行完之后、事务提交之前,第一次执行 insert、update、delete 语句时,才会执行这两个操作。...总结 以读事务或只读事务身份启动的事务: 如果执行的第一条 SQL 语句是 update 或 delete,在 SQL 语句执行过程中,读事务会变成读写事务,只读事务会分配事务 ID 和用户临时表的回滚段

25910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    这是我见过最有用的Mysql面试题,面试了无数公司总结的(内附答案)

    28.什么是SQL中的自动增量? 这是重要的Oracle DBA面试问题之一。 自动增量关键字使用户可以创建一个唯一的数字,以便在将新记录插入表中时生成该数 字。...每当使用主键时,都可以使用自动递增关键字。在Oracle中使用自动递增关键字 在SQL Server中使用IDENTITY关键字。 29.什么是临时表? 临时表是用于临时存储数据的临时存储结构。...内部联接:当正在比较的两个(或多个)表之间至少有一些匹配数据时,内部联接将返回行。 外部联接:外部联接从两个表返回行,这些行包括与一个或两个表不匹配的记录。 36.什么是SQL约束?...它涉及将冗余数据添加到一个或多个表的过程。 在规范化的数据库中,我们将数据存储在单独的逻辑表中,并尝试最小化冗余数据。 54.什么是存储过程?...该查询将返回“ SQL Server中的查询”。

    27.1K20

    T-SQL基础(六)之可编程对象

    其它 RETURN、CONTINUE、BREAK、WAITFOR、GOTO 更多详细内容,参考微软官方文档:Control-of-Flow 临时表 SQL Server支持三种临时表:本地临时表、全局临时表和表变量...临时表以#开头,如:#UserInfo。临时表中的数据存储在磁盘中。 全局临时表 与本地临时表最大的不同是:全局临时表对所有会话可见,当全局临时表不在被任何会话引用时,会被SQL Server销毁。...数据量较少时建议使用表变量,数据量较大时推荐使用临时表。 表变量 vs 临时表 表变量与临时表类似,但二者有所区别。临时表更多的强调它是数据表,表变量着重点则在于变量上。...SQL Server中函数返回值分为:标量与表值两种。...Server内置常用函数 存储过程 存储过程与函数有相似之处,如都体现了封装的思想,但存储过程可以执行更为复杂的逻辑,可以有多个返回值。

    1.6K30

    T-SQL语句的基本概念语法

    SQL Server?...当该事务完成时,再下一个T-SQL语句又将启动一个新事务 自动提交事务:这是SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚 索引...减少网络流量 触发器(Trigger)是在对表进行插入、更新或删除操作时自动执行的存储过程 在触发器触发时:系统自动在内存中创建两张临时表,deleted表或insert表 这两张表为只读,不允许修改...,触发器执行完成后,自动删除 inserted表:     临时保存了插入或更新后的记录行,可以从inserted表中检查插入的数据是否满足业务需求,如果不满足,则向用户报告错误,并回滚插入操作 deleted...表:     临时保存了删除或更新前的记录行,可以从表中检查被删除的数据是否满足业务需求,如果不满足,则向用户报告错误,并回滚插入操作

    1.4K20

    这个MySQL优化原理剖析,比照X光还清楚

    我们尝试插入一些数据: ?...MySQL执行SQL语句过程 ? 一、MySQL客户端和服务器通讯 客户端按照MySQL通信协议将SQL发送到服务端,SQL到达服务端后,服务端会单起一个线程执行SQL。...如果这个状态后面还有on disk标记,那表示MySQL正在将一个内存临时表放到磁盘上; 6. sorting result:线程正在对结果集进行排序; 7. sending data:线程可能在多个状态间传送数据...四、查询优化处理 查询的生命周期的下一步是将一个SQL转换成一个执行计划,MySQL在依照这个执行计划和存储引擎进行交互。这包含多个子阶段:解析SQL、预处理、优化SQL执行计划。...这个过程中任何错误都可能终止查询。 1. 语法解析器和预处理:首先MySQL通过关键字将SQL语句进行解析,并生成一颗对应的“解析树”。

    70240

    52条SQL语句性能优化

    17,使用“临时表”暂存中间结果简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,...20,将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 21,用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...23,尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT

    80310

    52 条 SQL 语句性能优化策略

    17、使用“临时表”暂存中间结果 : 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表...20、将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段,例如医院的住院费计算。 21、用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...23、尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。 存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...; 避免对大表查询时进行table scan,必要时考虑新建索引; 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用

    64760

    实用排坑帖:SQL语句性能优化操作策略大全

    17、使用“临时表”暂存中间结果 : 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表...20、将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段,例如医院的住院费计算。 21、用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...23、尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。 存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...避免对大表查询时进行table scan,必要时考虑新建索引; 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用

    85221

    Mysql性能优化一:SQL语句性能优化

    17,使用“临时表”暂存中间结果  简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表...20,将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 21,用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...23,尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样:  SELECT

    1.9K21

    52 条 SQL 语句性能优化策略,建议收藏!

    17 使用“临时表”暂存中间结果 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表...20 将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 21 用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...23 尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT

    93300

    MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行的

    执行如下SQL,我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。...执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。 至此,这个语句就执行完成了。 对于有索引的表,执行的逻辑也差不多。...Archive引擎支持行级锁和专用的缓冲区,所以可以实现高并发的插入。在一个查询开始直到返回表中存在的所有行之前,Archive引擎会阻止其他的select执行,以实现一致性读。...如果MySQL在执行查询的过程中,需要使用临时表来保存中间结果,内部使用的临时表就是Memory引擎。...临时表是指使用CREATE TEMPORARY TABLE语句创建的表,它可以使用任何存储引擎,因此和Memory不是一回事。临时表只在单个连接中可见,当连接断开时,临时表也将不复存在。

    1.2K30

    52 条SQL语句性能优化策略

    17 使用“临时表”暂存中间结果简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,...20 将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 21 用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...23 尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引; 如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT

    55830

    后端程序员必备:SQL高性能优化方案!50条优化,建议马上收藏!

    16、使用表的别名(Alias):当在 SQL 语句中连接多个表时,请使用表的别名并把别名前缀于每个 Column 上。这样一来,就可以减少解析的时间并减少那些由 Column 歧义引起的语法错误。...23、尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。 存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的 SQL 语句,是控制流语言的集合,速度当然快。...反复执行的动态 SQL,可以使用临时存储过程,该过程(临时表)被放在 Tempdb 中。...; 避免对大表查询时进行 table scan,必要时考虑新建索引; 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用...如果这些结果在查询编译时就能得到,那么就可以被 SQL 优化器优化,使用索引,避免表搜索,因此将 SQL 重写成下面这样: SELECT * FROM record WHERE card_no like

    1.1K01

    SQL优化

    使用“临时表”暂存中间结果 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中...将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT

    70320

    SQL优化的意义是什么?你用过哪些优化方式

    16,使用表的别名(Alias):当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。...17,使用“临时表”暂存中间结果 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表...20,将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 21,用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT

    1.4K20

    面试官:熟悉SQL优化吗?我只知道20种,其实远不止...

    16、使用表的别名(Alias):当在 SQL 语句中连接多个表时,请使用表的别名并把别名前缀于每个 Column 上。这样一来,就可以减少解析的时间并减少那些由 Column 歧义引起的语法错误。...23、尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。 存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的 SQL 语句,是控制流语言的集合,速度当然快。...反复执行的动态 SQL,可以使用临时存储过程,该过程(临时表)被放在 Tempdb 中。...;避免对大表查询时进行 table scan,必要时考虑新建索引;在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用...如果这些结果在查询编译时就能得到,那么就可以被 SQL 优化器优化,使用索引,避免表搜索,因此将 SQL 重写成下面这样: SELECT * FROM record WHERE card_no like

    50850

    mysql数据库优化大全

    16,使用表的别名(Alias):当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。...17,使用“临时表”暂存中间结果 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表...20,将需要查询的结果预先计算好放在表中,查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。 21,用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。...反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT

    1.1K20

    数据库查询优化

    ,必须选择记录条数最少的表作为基础表,当SQLSERVER处理多个表时,会运用排序及合并的方式连接它们。...首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序;然后扫描第二个表(FROM子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。...7 使用表的别名(Alias): 当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上,这样可以减少解析的时间并减少那些由Column歧义引起的语法错误。...如果每次引用这些视图的时候让sql server重新生成结果集,数据库开销将非常大。 12 让事务尽可能的短: 保持TSQL事务尽可能的短。...例如,通过网络发送一个存储过程调用,而不是发送500行的TSQL将更快,资源使用更少。当每次执行SQL时,都会执行解析SQL语句、估算索引的利用率、绑定变量、读数据块等等工作。

    4.3K20

    Hive3查询基础知识

    ACID表 您可以将数据插入到Hive仓库中的“优化行列式(ORC)”表中。...临时表数据仅在当前Apache Hive会话期间持续存在。Hive在会话结束时删除表。如果使用永久表的名称来创建临时表,则在会话期间无法访问该永久表,除非您删除或重命名该临时表。...创建和使用临时表。 a) Hive在会话结束时删除临时表。 使用子查询 Hive支持可用于许多Hive操作的FROM子句和WHERE子句中的子查询,例如,根据另一个表的内容过滤来自一个表的数据。...您可以在以下SQL语句中包含一个或多个CTE: • 选择 • 插入 • 创建表作为选择 • 创建选择视图 子查询块中不支持递归查询,并且不支持WITH子句。...在查询中使用CTE 您可以使用通用表表达式(CTE)简化创建视图或表,选择数据或插入数据的过程。 1.

    4.7K20
    领券