
Mysql
文章平均质量分 79
韩哥有话说
分享一些IT技术的个人理解
展开
-
SQL优化_行构造器表达式优化
行构造器表达式优化 行构造函数允许同时比较多个值。例如,以下两个语句在语义上是等效的: SELECT * FROM t1 WHERE (column1,column2) = (1,1); SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1; 另外,优化器以相同的方式处理两个表达式。 如果行构造器的列不覆盖索引的前缀,则优化器不太可能使用可用索引。考虑下表,该表具有一个主键 (c1, c2, c3): CREATE TABLE t1 ( c1 INT,原创 2021-03-31 11:52:44 · 205 阅读 · 0 评论 -
优化SQL语句_条件过滤
条件过滤 在联接处理中,前缀行是从联接中的一个表传递到下一个表的那些行。通常,优化程序会尝试在连接顺序的早期放置前缀计数较低的表,以防止行组合的数量迅速增加。在某种程度上,优化器可以使用有关从一个表中选择并传递到下一个表的行的条件的信息,它可以更准确地计算行估计并选择最佳执行计划。 如果不使用条件过滤,则表的前缀行数将WHERE根据优化器选择的访问方法,根据子句选择的估计行数进行计算 。条件过滤使优化器可以WHERE在访问方法未考虑的子句中使用其他相关条件 ,从而改善其前缀行数估计。例如,即使可能存在基于索原创 2021-03-31 11:50:23 · 1129 阅读 · 0 评论 -
Mysql_函数调用优化
函数调用优化 MySQL函数在内部被标记为确定性或不确定性。如果给定参数固定值的函数可以为不同的调用返回不同的结果,则它是不确定的。不确定函数的示例: RAND(), UUID()。 如果某个函数被标记为不确定的,则将WHERE针对每一行(从一个表中选择时)或行的组合(从多表联接中选择时)评估子句中对该函数的引用。 MySQL还根据参数的类型(参数是表列还是常量值)确定何时评估函数。每当表列更改值时,都必须评估将表列作为参数的确定性函数。 非确定性函数可能会影响查询性能。例如,某些优化可能不可用,或者可能需原创 2021-03-31 11:49:04 · 152 阅读 · 0 评论 -
Mysql_一致的非锁定读取
一致的非锁定读取 甲一致的读取 该装置InnoDB在一个时间点使用多版本存在于查询数据库的快照。该查询将看到在该时间点之前提交的事务所做的更改,而看不到以后或未提交的事务所做的更改。该规则的例外是查询可以看到同一事务中较早的语句所做的更改。此异常导致以下异常:如果更新表中的某些行,则 SELECT查看已更新行的最新版本,但也可能会看到任何行的旧版本。如果其他会话同时更新同一张表,则异常意味着您可能会以数据库中不存在的状态查看该表。 如果事务 隔离级别为 REPEATABLE READ(默认级别),则同一事务原创 2021-03-31 11:47:15 · 111 阅读 · 0 评论 -
Mysql_锁定读取
锁定读取 如果查询数据,然后在同一事务中插入或更新相关数据,则常规SELECT 语句不能提供足够的保护。其他事务可以更新或删除刚查询的相同行。 InnoDB支持两种类型的 锁定读取,这些读取提供了额外的安全性: SELECT ... LOCK IN SHARE MODE 在读取的任何行上设置共享模式锁定。其他会话可以读取行,但是在事务提交之前不能修改它们。如果这些行中的任何一个被尚未提交的另一个事务更改,则查询将等待直到该事务结束,然后使用最新值。 SELECT ... FOR UPDATE 对于索原创 2021-03-31 11:46:09 · 248 阅读 · 0 评论 -
Mysql_事务隔离级别
事务隔离级别 事务隔离是数据库处理的基础之一。隔离是缩写ACID中的I ; 隔离级别是一种设置,用于在多个事务同时进行更改和执行查询时微调性能与结果的可靠性,一致性和可重复性之间的平衡。 InnoDB报价由SQL描述的所有四个事务隔离级别:1992标准: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ,和 SERIALIZABLE。默认隔离级别InnoDB是 REPEATABLE READ。 用户可以使用该SET TRANSACTION语句更改单个会话或所原创 2021-03-31 11:43:17 · 118 阅读 · 0 评论 -
Mysql_使用InnoDB表的好处
使用InnoDB表的好处 您可能会InnoDB因为以下原因而发现表格有益: 如果您的服务器由于硬件或软件问题而意外退出,无论当时数据库中发生了什么,重新启动数据库后都无需执行任何特殊操作。InnoDB 崩溃恢复会 自动完成崩溃之前已提交的所有更改,并撤消正在处理但尚未提交的所有更改。只需重新启动,然后从上次中断的地方继续即可。 该InnoDB存储引擎维护它自己的 缓冲池,在主内存缓存表和索引数据作为数据被访问。经常使用的数据直接从内存中处理。此缓存适用于多种类型的信息,并加快了处理速度。在专用数据库服务器原创 2021-03-31 11:39:33 · 401 阅读 · 0 评论 -
Mysql_聚集索引和二级索引
聚集索引和二级索引 每个InnoDB表都有一个特殊的索引,称为聚簇索引 ,用于存储行数据。通常,聚簇索引与主键同义 。为了从查询,插入和其他数据库操作中获得最佳性能,您必须了解如何InnoDB使用聚簇索引为每个表优化最常见的查找和DML操作。 在PRIMARY KEY表上定义a 时,InnoDB将其用作聚簇索引。为您创建的每个表定义一个主键。如果没有逻辑唯一且非空的列或列集,请添加一个新的 自动递增 列,其值将自动填充。 如果您没有PRIMARY KEY为表定义a ,则MySQL将UNIQUE在所有键列所原创 2021-03-31 11:36:52 · 224 阅读 · 0 评论 -
Mysql_幻影读
幻影读 当同一查询在不同时间产生不同的行集时,在事务内就会发生 所谓的幻像问题。例如,如果一个 SELECT执行两次,但是第二次返回的行却不是第一次返回,则该行是“ phantom ”行。 假设id该child表的列上有一个索引,并且您想要读取和锁定该表中所有标识符值大于100的行,以期稍后更新所选行中的某些列: SELECT * FROM child WHERE id > 100 FOR UPDATE; 该查询从id大于100的第一条记录开始扫描索引 。让表包含具有id90和102值的行。如果在扫原创 2021-03-31 11:35:31 · 219 阅读 · 0 评论 -
Mysql_撤消日志(Undo Logs)
撤消日志(Undo Logs) 撤消日志是与单个读写事务关联的撤消日志记录的集合。撤消日志记录包含有关如何撤消事务对聚簇索引 记录的最新更改的信息。如果另一个事务需要将原始数据视为一致读取操作的一部分,则将从撤消日志记录中检索未修改的数据。撤消日志存在于 撤消日志段中,撤消日志段中包含 撤消日志段。回滚段位于 系统表空间,撤消表空间和临时表空间中。 驻留在临时表空间中的撤消日志用于修改用户定义的临时表中的数据的事务。这些撤消日志未重做记录,因为崩溃恢复不需要它们。它们仅在服务器运行时用于回滚。这种类型的撤消原创 2021-03-31 11:12:43 · 175 阅读 · 0 评论 -
InnoDB的排序索引构建
InnoDB的排序索引构建 InnoDB创建或重建索引时,执行一次批量加载,而不是一次插入一个索引记录。这种索引创建方法也称为排序索引构建。空间索引不支持排序索引构建。 索引构建分为三个阶段。在第一阶段,将 扫描聚簇索引,并生成索引条目并将其添加到排序缓冲区。当排序缓冲区已满时,将对条目进行排序并将其写到临时中间文件中。此过程也称为 “ 运行 ”。在第二阶段中,将一个或多个运行写入临时中间文件,对文件中的所有条目执行合并排序。在第三个也是最后一个阶段,将已排序的条目插入 B-tree中。 在引入排序的索引版原创 2020-09-21 13:57:07 · 302 阅读 · 0 评论