在项目中,有时候时间紧,我们往往比较关注功能,对于性能关注度没有那么高,书写的SQL能够支持功能即可,但是在线上运行过程中,会出现各种问题,sql太慢,这时候我们的第一反应是是不是没走索引,于是找到DBA说加个索引,但是其实有了索引查询未必快,具体问题需要具体分析,对于查询,我们可以自己通过explain来分析一下,这样和DBA沟通起来会非常方便。
这里顺便总结一下mysql的监控情况,linux的系统级别监控就不提了,因为mysql是IO密集型应用,所以重点关注iowait,对于mysql本身,qps(每秒内查询的次数)TPS(每秒内提交的事务,可以理解为insert+update+update),thread running(当前处于活动状态的数据库连接数),最重点的就是RT,貌似mysql没发直接查看响应时间,这个DBA写工具解决,这个指标可以视为在紧急情况下首要关注的,其次还有innodb层的监控,这个作为开发就比较业余了。
这里抄袭一下索引设计的几个原则:
A、设置索引项,应该是出现在where后面的列,或者连接字句中出现的列;
B、使用唯一索引,索引的基数越大,索引查询的效果越好,举例:查询条件中含有索引字段和非索引字段的时候,会优先走索引筛选出数据,然后在数据中回表过滤没有走索引的字段,但是Mysql任务,如果索引筛选出的数据量大于20%,会认为此时走索引效果不如全表扫描,继而放弃索引,走全表扫描来查询;
C、使用短索引,例如一个属性200多位,其实索引只要创建前几位效果会好;
D、最左原则,组合索引中,灵活运用最左前缀;
E、不要过度使用索引,索引会占用空间,影响写入的速度;
(1)慢SQL如何获取?
应用程序能够感知到SQL慢,因为慢了,提供服务就慢,系统吞吐自然就上不去。这时候可以在mysql上面查看慢SQL的日志,这个文件看起来不是很方便,DBA通过工具把这些日志加工成比较容易分析,能够很直观的看出慢SQL是啥,以及SQL执行花费的时间和执行的时间点。获取了这些慢SQL,就有了分析的依据。
(2)如何分析SQL为啥慢了?
mysql提供了一个工具来分析SQL执行查询的时候的情况,使用很简单:explain select语句
输出的结果是表格,各个字段的解释如下:
select_type
|
simple:简单表,即不使用表连接或者子查询;
primary:主查询
union:union中的第二个或者后面的查询语句
subquery:子查询中的第一个select
|
table
|
输出结果集的表
|
type
|
表连接的类型
system:表中仅有一行,即常量表
const:单表中最多有一个匹配行,主键或者唯一索引
eq_ref:对于前面的每一行,在此表中只查询一条记录,简单说就是多表查询中使用主键或者唯一索引
ref:和eq_ref类似,区别在于使用的是普通的索引
ref_or_null:和ref类似,区别在于查询总有NULL的查询
index_merge:索引合并优化
unique_subquery:in后面是一个查询主键的子查询
index_subquery:in后面的是一个查询普通索引的子查询
range:单表中的范围查询
index:前面的每一行,都通过查询索引获取数据
all:全表扫描,性能最差
|
possible_keys
|
查询时可能用到的索引
|
key
|
查询时实际用到的索引
|
key_len
|
索引字段的长度
|
ref
|
|
rows
|
扫描行的数量
|
extra
|
执行情况的说明和描述
|
分享到:
相关推荐
OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...
### MySQL 查询重复语句详解 在数据库管理与维护过程中,数据的一致性和准确性至关重要。当涉及到数据去重时,MySQL 提供了多种方法来帮助我们有效地处理数据中的重复记录。本文将详细介绍如何利用 MySQL 查询语句...
这份"mysql查询语句汇总.zip"包含了丰富的学习资源,包括"mysql查询语句汇总.pdf"和"项目说明.pdf"两个文件,旨在帮助用户深入理解和掌握MySQL查询的各个方面。 首先,"mysql查询语句汇总.pdf"很可能是一个详细的...
在设计高效合理的MySQL查询语句时,关注查询性能至关重要,因为查询操作在数据库操作中占据了主要部分,而SELECT语句的执行成本最高。随着数据量的增加,全表扫描会导致查询时间显著增长,可能需要数十分钟甚至数...
MySQL查询语句是数据库管理中不可或缺的部分,它用于从数据表中检索信息。在这个名为"mysql查询语句学习记录.zip"的压缩包中,我们很可能找到了一个由kwan1117编写的关于MySQL查询的学习笔记或教程。下面将详细讨论...
首先,分析实体类的属性,然后根据属性类型选择对应的MySQL数据类型,比如`String`对应`VARCHAR`,`int`对应`INT`,`Date`对应`DATE`或`TIMESTAMP`等。同时,别忘了添加主键、外键、索引等约束。 6. **数据类型映射...
### MySQL查询流程分析 在深入理解MySQL查询流程之前,我们首先需要明确几个基本概念:MySQL是一种关系型数据库管理系统,它支持SQL(Structured Query Language)语言,用于管理存储在表格中的数据。MySQL查询流程...
对于数据库管理员、开发者以及数据分析师来说,熟练掌握MySQL查询语句是必不可少的技能。本文将全面介绍MySQL查询语句的各个方面,从基础查询到高级操作,旨在帮助读者提升MySQL查询技能,更好地应对日常工作中的...
MySQL SQL语句练习题及答案 本资源提供了 MySQL SQL 语句的练习题及答案...这个练习题涵盖了 MySQL SQL 语句的多方面知识点,包括创建表、插入数据、删除数据、更新数据、查询数据、统计分析、连接查询、嵌套查询等。
通过对MySQL查询语句的深入理解与实践,我们不仅能够更高效地管理和分析数据,还能利用其丰富的高级特性来解决复杂的应用场景问题。无论是初学者还是资深开发者,持续学习MySQL的新特性和最佳实践都是提高工作效率的...
MySQL 查询语句大全 本资源摘要信息是对 MySQL 查询语句大全的详细说明,该资源涵盖了 ...本资源摘要信息涵盖了 MySQL 查询语句的各种类型和应用场景,旨在帮助开发者更好地使用 MySQL 查询语句来实现数据查询和分析。
5. 查询语句的分析:分析SQL语句是为了找出可能影响性能的部分,如慢查询。可以利用EXPLAIN命令来查看SQL的执行计划,包括执行顺序、扫描行数、是否使用索引等信息。 6. 索引的使用:合理创建和使用索引可以大大...
MySQL查询分析器通常具备多种功能,包括编写、测试、优化以及监控SQL语句,以提升数据库系统的整体效率。 在MySQL的世界里,查询分析器扮演着至关重要的角色。它允许用户输入SQL命令,然后通过解析这些命令来与...
在本文中,我们将对 mysql 查询语句学生表、课程表、成绩表、教师表进行详细的分析和解释。该文档提供了 8 个常用 sql 语句,涵盖了学生表、课程表、成绩表、教师表的基本操作和查询。 1. 查询课程比课程成绩高的...
### MySQL查询语句详解 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其高性能、稳定性和灵活性而受到开发者的青睐。在MySQL中,数据查询语言(DQL)主要用于检索存储在数据库中的数据。本文将深入...
通过上述分析,我们可以看到,无论是UPDATE还是SELECT语句,在MySQL数据库操作中都扮演着至关重要的角色。正确理解和灵活运用这些命令,能够极大地提高数据库管理的效率和准确性。特别是对于批量数据处理,掌握适当...
MySQL是一种广泛使用的开源关系...这些MySQL查询语句是数据库操作的核心,理解并熟练掌握它们,将极大地提升你的数据库管理和数据分析能力。通过不断的练习和实际应用,你可以更有效地从MySQL数据库中提取所需的信息。
本文档提供了 8 个关于学生表、课程表、成绩表、教师表的常用 SQL 查询语句,这些查询语句涵盖了基本的数据检索、数据分析、数据统计等方面,对于 MySQL 数据库的开发和管理非常有帮助。 知识点 1: 查询“ ”课程比...
1. **数据迁移需求分析**:在开始转换之前,了解源MySQL表的结构和数据类型至关重要。这包括表的名称、列名、数据类型、主键、外键、索引、约束等。 2. **SQL语法差异**:MySQL与Oracle之间的主要语法差异包括: -...