MySQL查询优化总结

常用的MySQL 优化方法 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷。 阅读详情

MySql的性能优化其实有很多方面,比如从客户端层面,从应用层面等等,在这里暂只关注SQL的优化,后续遇到非SQL的MySQL优化的真实的场景,再做进一步介绍。

索引创建和使用的一些原则

除了前面case中或多或少提到过的一些原则,这里又简单整理了一些。

  1. 代码先行,索引后上

SQL是根据业务而生的,索引也是根据业务而做的优化,如果开始没有非常明确的需求和较为严谨的设计,不建议上来就设计各种索引。可以先把主体业务开发完,回头从全局再从全局审视一遍哪些地方合适建立索引,哪些地方未来可能需要索引。

  1. 考虑索引列中不重复值的比例或个数

尽量不在离散度太低的列上建立单个索引,比如没有强业务需求,不要在类似sex性别列上建索引,它的区分度不高,如果这个条件进行索引扫描后,还是回表,由于离散度很低,导致筛选出来记录数太多,要做回表的代价也就很大,MySQL查询优化器可能直接全表扫描了。因此需要考虑索引列中不重复值的比例或者个数,如果性能要求高,还可以对索引列进行统计,针对不同情况进行优化。

  1. 索引列占用空间尽量小

比如索引列能用int就不用bigint,因为数据类型越小,索引占用的存储空间就越少,在一个数据业内就可以存放更多的索引记录,磁盘IO带来的性能损耗也就越小(一次页面IO可以讲更多的记录加载到内存),读写效率也就越高。这个建议对主键来说更加适用,因为不仅聚簇索引会存储主键,其他的辅助索引也会存主键。

再比如当列比较大的时候(可能是长字符串),为列前缀建立索引,类似:

alter table single_table add index idx_key1(key1(10));

这样,在查询key1='sdsdgfgfhghkljdfkj'的时候先在辅助索引中定位到前10个字符,然后在判断是否后面的字符相等。需要注意的是,这种定义的索引最好只应用于等值查询,对于范围查询,就捉襟见肘了,特别是排序,是无法使用的。

  1. 业务允许情况下,where与order by冲突,优先where

一般情况下一条语句中只能使用一个索引,如果有where条件和order by同时出现,且都有索引,建议根据情况优先where的索引,因为往往where后会过滤记录,相比于使用order by后面列的索引,回表次数要少。另外如果记录数不多也可以在应用层进行排序,减小MySQL压力。当然MySQL也支持索引合并,意思就是可以使用一个以上的索引,把两个索引树查询的结果做交集或者并集等。想要了解的可以参考MySQL索引合并详解。

  1. 几个条件几乎都一起使用,建联合索引

如果几个条件基本不分开使用,没必要分别建立索引,建一个索引相当于要存储一个索引树。

  1. 使用联合索引时,尽量把索引中涉及到字段都用上

联合索引,注意最左前缀原则,最好能保证联合索引所有字段都在索引扫描中使用到,性能可能会更好。

  1. 尽量使用索引覆盖

使用索引覆盖,能有效减少回表,特别是对于大量回表的场景,能较大幅度提升性能。

  1. 避免重复索引

比如对于表

create table test(

id int not null primary key,

a int not null,

b int not null

)

建立索引(a,b) 和索引(a),是重复建立索引;

建立索引(a)和索引(a,id) 也是重复索引。

查询慢的本质

其实从本质上来讲,查询慢除了MySQL软件本身的一些问题外,基本上都是因为我们在使用MySQL时,让其访问或者扫描了较多的数据。这里的数据并不一定是表中我们存放的数据,它还可能是MySQL的一些内部数据结构,比如辅助索引等。而出现这一问题的原因,一般都是由于使用不适当,主要是在业务上和MySQL执行上:在业务上可能是我们没有很好的使用MySQL;在MySQL执行角度上,可能是我们没有从原理去理解MySQL如何进行查询,从而导致我们写的SQL语句和设计的索引并不是很高效的执行。我们再稍微详细一点,看看都从哪些方面去考虑问题:

  • 从业务角度,业务本身并不是强烈需要某种查询结果或者可以有更好的查询方式,但没有做过或者做好。比如:
    • 是否查询了不必要的记录
    • 是否查询了所有列
    • 是否重复相同的查询(可能条件会变)
  • 从MySQL执行角度,由于创建、使用索引不用适当或者查询语句的不适当,导致查询效率不高。比如:
    • 是否实际需要查询的行数(返回的行数)与扫描的行数差距较大?

比如最简单的limit。

    • 是否实际访问类型(Explain执行计划中的tpye字段)级别较低?

从全表扫描到索引扫描、范围扫描、唯一索引查询、常数引用等,速度是从慢到快,扫描的行数也是从大到小。对其中相关的扫描表、扫描索引、范围访问和单值访问的原理要非常熟悉。

重构查询的方法论

有时候我们也根据原理进行了SQL的优化,索引也进行优化,但业务就要求我们需要那样一个查询结果,因为查询效率低而直接放弃这种业务场景是极为不智的。其实我们应该想清楚我们要的到底是什么的性能?其实是业务的性能,而不是单纯MySQL的性能,目标应该是找到一个更优的方法获得实际需要的结果——而不一定总是需要从MySQL获取一模一样的结果。有时候,可以将查询转换一种写法让其返回一样的结果,但是性能更好。但也可以通过修改应用代码,用另一种方式完成查询,最终达到一样的目的。

  • 我们需要的是一个复杂的查询还是多个简单的查询?
  • 是否需要切分查询,比如大范围查询切分为小范围查询?
  • 是否可以分解关联查询?是否可以将部分数据缓存在应用层?

MySQL排查查询性能问题的工具

MySQL慢查询日志

了解了索引的数据结构,分析了MySQL在查询时的原理,介绍了Explain语句查看执行计划,还熟悉了一下成本分析与MySQL统计信息的来源,截止目前为止,我们基本上可以从原理上分析和优化MySQL的查询了。接下来简单聊聊如何发现这些性能问题。

MySQL本身提供了记录慢查询的功能,以日志形式,通过记录在MySQL中响应时间超过阀值的语句来完成此功能的。这个阈值为系统参数long_query_time,默认为10s,可改。慢查询日志默认关闭,可通过系统参数slow_query_log开启,1表示开启。慢查询日志默认被命名为${host_name}-slow.log,打开即可查看,但日志为文本格式,查看起来比较费劲,MySQL还提供了对慢查询日志进行分析的工具mysqldumpslow。

慢查询几个很重要的参数:

long_query_time:上面有提到,不多说。

log-queries-not-using-indexes:为1表示慢查询日志中记录所有没有走索引的语句,这对我们进行性能优化也有着非常大的作用。

log_throttle_queries_not_using_indexes:如果log_queries_not_using_indexes打开,该参数将限制每分钟写入日志的SQL数量。

min_examined_row_limit:对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中。这个参数也比较重要。但需要注意,对于此参数,如果扫描行数小于此参数,就算整体耗时查过long_query_time,也不会被记录在日志中。

需要注意的是慢查询会有CPU和日志IO的开销,线上尽量采取间断开启慢日志方式收集慢查询。

小总结

对于慢查询,我们需要多关注查询响应时间、是否走索引、扫描行数,由于有CPU和IO开销,线上需要间断开启慢日志。

MySQL日志分析工具mysqldumpslow

[root@DB-Server ~]# mysqldumpslow --help
 Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
 
Parse and summarize the MySQL slow query log. Options are
 
  --verbose    verbose
  --debug      debug
  --help       write this text to standard output
 
  -v           verbose
  -d           debug
  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default(排序方式)
                 al: average lock time(平均锁定时间)
                 ar: average rows sent(平均返回记录数)
                 at: average query time(平均查询时间)
                  c: count(访问计数)
                  l: lock time(锁定时间)
                  r: rows sent(返回记录)
                  t: query time(查询时间)
   -r           reverse the sort order (largest last instead of first)
   -t NUM       just show the top n queries(返回前面n条数据)
   -a           don't abstract all numbers to N and strings to 'S'
   -n NUM       abstract numbers with at least n digits within names
   -g PATTERN   grep: only consider stmts that include this string(正则匹配模式,大小写不敏感)
   -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
                default is '*', i.e. match all
   -i NAME      name of server instance (if using mysql.server startup script)
   -l           don't subtract lock time from total time

常用的mysqldumpslow命令

取出使用最多的10条慢查询

mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log 

取出查询时间最慢的3条慢查询

mysqldumpslow -s t -t 3 /var/run/mysqld/mysqld-slow.log

得到按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log

按照扫描行数最多的

mysqldumpslow -s r -t 10 /var/run/mysqld/mysqld-slow.log

其他的例子在这里就不举了,大家可以自己下去试试。

第三方日志分析工具pt-query-digest

pt-query-digest是用于分析mysql慢查询的一个工具,它不但可以分析slowlog,还可以分析binlog、General log。pt-query-digest把分析结果输出到文件中,分析过程大致是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。

pt-query-digest [OPTIONS] [FILES] [DSN]

--create-review-table  当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。
--create-history-table  当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。
--filter  对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
--limit限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。
--host  mysql服务器地址
--user  mysql用户名
--password  mysql用户密码
--history 将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化。
--review 将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中。
--output 分析结果输出类型,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读。
--since 从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天),如12h就表示从12小时前开始统计。
--until 截止时间,配合—since可以分析一段时间内的慢查询。

pt-query-digest的具体使用例子就不在这里聊了,

总结

  • 索引是排好序的数据结构,“排好序”尤为关键,它决定着MySQL能否更好的进行范围查询和顺序扫描以及解决排序问题等。
  • MySQL的InnoDB引擎的索引主要采用经过小小改造的B+Tree(叶子节点为双向链表,也是首尾相连的循环链表),跟其他数据结构相比,可以容纳更多的数据,且查询性能高。叶子节点双向链表,可以方便的从任意叶子节点向前或者向后扫描。
  • 如果能让MySQL顺序扫描叶子节点,可能会利用顺序读,保证一定性能。因为在写数据的时候可能会一次性写很多页,在磁盘上可能是顺序写。
    • 对于聚簇索引,叶子节点按照主键排序,因此如果不是业务必须,自增主键是个良好选择,因为自增主键不需要对其重排序,B+Tree结构不需要总是调整,这就可能会顺序写。
    • 对于辅助索引,叶子节点按照索引列排序,也可能顺序写,但如果频繁更新和删除,会频繁更改B+Tree结构,读的时候就不一定能顺序读了。
    • 回表操作基本都是随机读,因为在辅助索引中,主键不是有序的,回表相当于随机访问指定的叶子节点。
  • 所有的SQL出现问题,都要想到B+Tree这个结构,辅助索引数据结构是B+Tree,无辅助索引,即只有聚簇索引,也是B+Tree,从B+Tree上考虑问题,才能尝试去分析。
  • 排序、分页、表连接的优化见文章的对应的小总结
  • MySQL并不一定走索引,或者并不一定走你心中所想的索引,这取决与成本估算,MySQL会对全表扫描,各种不同的索引,各种不同的连接做成本估算,以成本代价最少的方案作为执行计划,当然MySQL的成本估算不是什么时候都那么准确的,如果MySQL进行全表扫描,或者使用了你不想使用的索引,你可以在语句中强制使用你想要使用的索引。
  • 性能优化的思路:
    • 根据业务性能反馈或者MySQL慢查询进行分析,找到需要做性能优化的语句以及一些性能指标或者关键点。
    • 需要关注的性能方面的关键点包括但不限于返回结果数,扫描行数,执行type类型,是否走索引,是否较多的回表,是否文件排序等等。相应的,优化方式也是减少不必要结果返回,减少不必要的扫描,合理建立索引,减少回表等。
    • 上述需要关注的点可以通过慢日志的分析和执行计划以及成本的分析获取。
    • 除了对SQL语句的优化,考虑在应用或者业务层面进行优化,比如复杂查询拆解,范围查询分查,应用层做连接等等。

MySQL的性能优化除了SQL的优化、业务和应用层面的优化,还有系统参数的调优以及锁的优化,锁、MVCC等等相关知识也会在其他文章慢慢补充。

虽然业界说MySQL源码写的烂,但它毕竟是大多数互联网各厂用的最广泛的数据库,经过了长时间的考验,还是博大精深的,我们要学的是其中的思想,也到不了源码那个层次。

不管怎样,了解MySQL的一些原理除了满足现有工作所需,还有助于对比学习一些其他比较优秀的数据库,比如PostgreSQL,其索引结构也与MySQL有一定的相似。技术道路甚远,且行且学!

MySQL性能调优:提升性能的关键步骤 1.读写分离主要是用于解决 “数据库读性能问题”2.水平切分主要是用于解决“数据库数据量大的问题”3.分布式缓存架构可能比读写分离更适用于高并发、大数据量大场景。 阅读详情

相关推荐

MySQL-查询优化

对于刚入行的程序猿来说,如何优化MySQL查询,是必须跨过的坎。网上有很多关于SQL优化的博文,但大多是片段和结论。这里,我摘抄了《高性能MySQL》一书的内容,从全局的角度将MySQL查询优化的思路和要点进行串通,希望能帮助大家有一个系统性的认知。如果希望深入学习请阅读此书籍,并在实际开发中反复思考佐证。 一、MySQL基本架构 1、基本架构组成 Server层:包括连接器、查询缓存、...

Wonder ZH 2万+

mysql in查询不要去重_MySQL 查询优化

使用索引规则全值匹配:查询的字段按照顺序在索引中都可以匹配到,最佳左前缀法则:指的过滤条件要使用索引必须按照索引建立时的顺序依次满足 , 一旦跳过某个字段 , 索引后面的字段都无法被使用。不在索引列上做计算:不在索引列上做任何操作(计算、函数、(自动 or 手动)类型转换「尤其注意 varchar 和 int」),会导致索引失效而转向全表扫描。索引列上不能有范围查询:将可能做范围查询的字段的索引顺...

weixin_42514777的博客 5361

【对于覆盖索引来说,如果不按顺序查,MySQL 会进行优化成想要的顺序吗?】

覆盖索引可以显著地提高查询性能,但是如果查询条件不按照索引的顺序进行查询,MySQL 不能进行索引优化以达到想要的顺序。因此,使用覆盖索引的关键是要让查询条件和索引顺序匹配,以使得 MySQL 可以使用索引进行优化。对于多列索引,如果查询条件不按照索引列的顺序查询,MySQL 也不能进行优化成想要的顺序。这时,可以通过调整查询语句,将查询条件按照索引列的顺序进行排列,或者使用 FORCE INDEX 强制使用索引进行查询。

学无止境 503

MySQL 查询优化详解

MySQL 查询优化是提升数据库性能的关键,通过查询分析与执行计划(EXPLAIN),可以深入理解查询的执行过程,识别性能瓶颈。同时,虽然 MySQL 8.0 已移除查询缓存功能,但在早期版本中,查询缓存仍然是提升性能的一种方式。最后,使用 SQL 重写技巧,可以通过优化查询结构和减少资源消耗,显著提升查询效率。在实际应用中,优化查询不仅仅依赖于单一的技巧,而是需要结合数据库结构、索引设计、执行计划等多个因素进行综合考虑。通过持续的监控和优化,可以确保数据库在高负载情况下依然能够高效运行。

yimeixiaolangzai的博客 3592

CANoe数据回放实战:如何用Replay Block精准复现实车故障(附ECU数据处理技巧)

本文深入探讨了利用CANoe的Replay Block功能进行数据回放,以精准复现实车偶发性故障的实战方法。文章重点解析了从原始OBD日志中移除目标ECU数据、转换报文方向等核心数据处理技巧,旨在帮助工程师重构真实的网络测试环境,从而高效定位并解决复杂的ECU问题。

nnn11的博客 495

知识导航神器:Obsidian Breadcrumbs 插件全攻略

Parent: 插件Child: Breadcrumbs 用法这样,它就能识别出你和其他笔记的关系。

m0_73735578的博客 1628

【MySQL】查询优化

✓ 优化的目的是让资源发挥价值;✓ SQL和索引是调优的关键,往往可以起到“四两拨千斤”的效果。

迪曼奥特迦-博客 8994

两轮差速小车循线控制原理分析

硬件资料设定:小车驱动来自于两个相同的电机,转向依靠两轮差速实现,小车前后左右安装超声波传感器,前后各一个,左右各两个; 功能目标:假设小车左侧有墙壁,通过超声波测距实现按指定距离沿墙行驶 参数设定:车轮半径r=3cm,车轮间距wd=10cm,车身长length=16cm,侧边超声波传感器前后各一个,假设一个在车头一个在车尾,间距=车身=length=16cm,小车线速度恒定v = 0.2m/s,距离墙d=10cm,假设超声波传感器以10Hz的频率采集距离。 在以上条件下,设定小车出发点,方向与墙平行

aibingjin的博客 1万+

MySQL 查询优化

在 MySQL 查询优化,我们要充分利用索引,让其发挥巨大作用;也要注意关联查询、排序查询、分组查询、子查询、分页查询、去重查询、以及 IN 和 EXISTS 关键字的使用。

格物致知,知行合一。 3198

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 708

C51红外接收与发射控制及原理编码与解码

基于38khz的NEC协议红外发射简易电路图NEC协议产生红外光数据编码 0 1结合程序红外接收接收电路解码过程解码代码 红外发射 通过通过红外二极管发射红外光,三极管的状态来控制。 红外模块一般都是三个引脚,vcc,gnd,dat,通过控制dat口的来控制发射红外光。 简易电路图 将数据口连接到单片机的引脚为上,控制io口的电平状态,来控制三极管的导通状态,从而发射红外光。 NEC协议 NEC协议特点:8位地址和8位命令为提高可靠性,地址和命令都传输2次,脉冲间隔调制38kHz载波频率。 包含引导码,

yangfeng20的博客 1万+

MySQL查询优化

从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中“执行”可以认为是整个生命周期中最重要的阶段,这其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序、分组等在完成这些任务的时候,查询需要在不同的地方花费时间,包括网络,CPU计算,生成统计信息和执行计划、锁等待(互斥等待)等操作,尤其是向底层存储引擎检索数据的调用操作,这些调用需要在内存操作、CPU操作和内存不足时导致的I/O操作上消耗时间。

代码是程序员的语言,博客是思想的桥梁,连接你我,共享智慧之光。 1251

gtsam官方文档: The new IMU Factor学习笔记

gtsam官方文档:The new IMU Factor 本文为gtsam imu预积分文档学习笔记,为gtsam基于切向量实现的imu预积分的理论基础。 导航状态 定义导航状态为 Xbn={Rbn,Pbn,Vbn}X^n_b=\{R^n_b,P^n_b,V^n_b\}Xbn​={Rbn​,Pbn​,Vbn​} 上角标n:导航(navigation)坐标系 下角标b:载体(body)坐标系 下文均省略上下标 矢量场与微分方程 对于导航问题我们用如下微分方程描述 X˙(t)=F(t,X)\dot X(t)

南柯一梦的博客 1608

MySQL优化-查询优化

查询优化是数据库优化中的一个重要方面,可以提高查询的效率和响应速度,从而提升数据库系统的整体性能。以下是一些查询优化的总结:使用索引:索引可以加速查询的速度,因此需要在经常使用的字段上创建索引,避免在 where 子句中使用不等于避免在 where 子句中使用 or 操作符,避免在 where 子句中使用函数,避免在 where 子句中使用模糊查询。避免全表扫描:尽量避免使用不带条件的 select 语句,因为这会导致数据库执行全表扫描,而且会消耗大量的系统资源。

qq_51398439的博客 2686

Linux kernel crypto的介绍和代码导读

在Linux kernel的module_init阶段会将algif_type_skcipher、algif_type_aead、algif_type_hash、algif_type_rng 四种算法注册.在userspace通过netlink调用了,kernel种的af_alg模块收到消息后, 根据上层传来的算法种类名字来选择走哪一个结构体(alg_type_xxx)的ops函数。也就是添加到af_alg维护的alg_types链表种. alg_types链表种仅有这四个数据.

baron-周贺贺-代码改变世界ctw 321

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3416

MySQL查询优化之查询优化器

MySQL查询优化之查询优化器phpma.com  当你提交一个查询的时候,MySQL会分析它,看是否可以做一些优化使处理该查询的速度更快。这一部分将介绍查询优化器是如何工作的。如果你想知道MySQL采用的优化手段,可以查看MySQL参考手册。phpma.com  当然,MySQL查询优化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查询,那么无论数据表

ethanzhao的专栏 3037

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mysql慢查询优化

定位低效 SQL 执行慢有两种情况: 偶尔慢:DB 在刷新脏页 redo log 写满了 内存不够用,要从 LRU 链表中淘汰 MySQL 认为系统空闲的时候 MySQL 关闭时 一直慢的原因:索引没有设计好、SQL 语句没写好、MySQL 选错了索引 ’mysql慢查询优化 第一步:开启mysql慢查询日志,通过慢查询日志定位到执行较慢的SQL语句。 第二步:利用explain关键字可以模拟优化器执行SQL查询语句,来分析SQL查询语句。 第三步:通过查询的结果进行优化。 优化方式 (1)首先分

weixin_45615504的博客 7661

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mysql查询优化_mysql查询优化之一:mysql查询优化常用方式

一、为什么查询速度会慢?一个查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中在“执行”阶段包含了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序、分组。查询速度慢的原因在于:某些不必要的额外操作,某些操作被额外地重复很多次,某些操作执行得太慢。优化查询的目的就是减少和消除这些操作所花费的时间。二、慢查询基础:...

weixin_35079144的博客 298

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

mysql 不等于查询优化_MySQL调优之查询优化

实际工作中,有时候打开一个页面响应时间非常慢,这背后通常牵涉到SQL语句查询慢的问题。前面我们提到很多数据库结构设计,建索引等来视图提高MySQL的性能。但是如果我们实际业务场景中,SQL查询语句写的不合适,索引建的再好可能也达不到预期的高性能。因此,我们很有必要对查询进行分析,我写的查询为什么慢,该怎么样对查询进行优化。查询慢的原因一般情况下,查询可以看成按如下顺序执行任务:由客户端向...

weixin_39977136的博客 1227

mysql 不等于查询优化_MySql查询优化常用方式

一、为什么查询速度会慢? 一个查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中在“执行”阶段包含了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序、分组。 查询速度慢的原因在于:某些不必要的额外操作,某些操作被额外地重复很多次,某些操作执行得太慢。 优化查询的目的就是减少和消除这些操作所花费的时间。二、慢查询...

weixin_39890629的博客 827

mysql 优化子查询_MySQL子查询的优化

本文基于MySQL5.7.19测试创建四张表,pt1、pt2表加上主键mysql> create table t1 (a1 int, b1 int);mysql> create table t2 (a2 int, b2 int);mysql> create table pt1 (a1 int, b1 int, primary key (a1));mysql> create ...

weixin_31632707的博客 970

如何优化MySQL查询?

降低响应时间,减少返回行数,减少扫描行数。

松生的博客 1996

mysql关联查询和查询优化

mysql关联查询 参考:https://blog.youkuaiyun.com/lu0422/article/details/78892497 mysql查询慢的原因 记录慢查询日志 分析查询日志,不要直接打开慢查询日志进行分析,这样比较浪费时间和经历,可以使用pt-query-digest工具进行分析 使用show profile set profileing = 1;开启,服务器上执行所有...

qinAction的博客 2403

【MySQL】查询性能优化

用户自定义变量是一个用来存储内容的临时容器,在连接MySQL的整个过程中都存在可以使用下面的SET和SELECT语句来定义他们正在上传…重新上传取消。

weixin_45912201的博客 2236
上一篇: javaScript:cropperjs是一款非常强大却又简单的图片裁剪工具
下一篇: 整理一份基础Swift面试题,真心能帮助到您
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值