MySQL系列(23):查看锁表和等待锁的事务, 死锁排查
今天碰到个涉及微服务和事务的问题,出现了死锁,抛出了事务等待锁超时的问题。
查了半天最后确定是对微服务环境下的事务,及事务使用的认识上存在不足导致。
今天碰到个涉及微服务和事务的问题,出现了死锁,抛出了事务等待锁超时的问题。
查了半天最后确定是对微服务环境下的事务,及事务使用的认识上存在不足导致。
在 Windows 和 Linux 环境安装MySQL,记录下操作步骤。
官方资料:2.3 Installing MySQL on Microsoft Windows,2.5 Installing MySQL on Linux
SQL 语句中常需要通过逻辑判断来控制流程的操作,MySQL 标准提供了 CASE
,IF
,IFNULL
,NULLIF
控制流函数。
MySQL 对范围查询提供了 range access method(范围访问方法) 来优化查询。
范围访问方法使用单个索引来检索包含在一个或多个索引值区间内的表行的子集。这里的单个索引可以是单列索引或多列索引。
MySQL 查询是以 SELECT 语句形式执行数据库中的所有查找操作,SELECT 操作在执行的 SQL 语句中占大比例,SELECT 调优可以说是对 SQL 优化的首要任务。
查询调优除了应用于 SELECT 语句外,还适用于诸如 create table…as select、insert in to…select 和 delete 语句中的 where 子句等构造。这些语句还有额外的性能考虑,因为它们将写操作与面向读的操作结合在了一起。
使用索引来提高查询性能效果是显著的,但不正确的 SQL 语句使用也会导致索引失效,索引使用未达预期,甚至执行全表扫描,此情况是严重影响性能的,在编写 SQL 语句时特别注意。
特别强调,在每提交一条 SQL 语句时,必须使用 Explain 分析下索引的的使用。在生产环境或测试环境下,小数据的 SQL 执行感觉不到性能的差异,但一旦发布到线上大数据表,不正确的 SQL 可能会严重影响生产库的性能,并给业务带了损失,此情况仍时有发生。
MySQL 查询执许计划 EXPLAIN 输出的信息有个扩展信息字段 Extra,该字段包含了有关 MySQL 如何解析查询的其他信息,可以更好地帮助理解执行计划。
该字段常见的值有 Using index、Using where。若想尽可能提高查询效率,需要关注 Using filesort 和 Using temporary 值,该值会影响查询的性能。
MySQL 优化器会根据 表、列、索引 和 WHERE 子句中的条件的详细信息,会考虑许多技术来更高效地执行 SQL 查询中涉及的查找。可以在不读取所有行的情况下执行对大表的查询,可以在不比较每个行组合的情况下执行涉及多个表的联接。
MySQL 优化器会选择最有效查询的操作集称为 查询执行计划,也称为 EXPLAIN 计划。MySQL EXPLAIN 官方文档,MySQL EXPLAIN 语句。
我们需要理解 EXPLAIN 计划中的操作是否已达到预期,以及对那些低效的操作进行改进。
给列创建索引是提高 SELECT 查询性能的最佳方式。索引类似于表行的指针,在查询时可以根据索引快速定位某些行与 WHERE 子句中的条件匹配,并检索该行的其他列值。MySQL 所有数据类型都可以创建索引。
虽然添加索引对查询带来的性能提效果是显著的,但也不是为每一个列都创建索引为好,索引还会增加 插入、更新和删除的成功,因为必须更新每个索引。
所有 MySQL列类型都可以被索引,对相关列使用索引是提高select
操作性能的最佳途径。
MySQL中最常用的存储引擎有InnoDB
和MyISAM
,这两种存储引擎的表默认创建的都是B-Tree
索引;MEMORY
存储引擎使用HASH
索引,也支持B-Tree
索引。