加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

自制小工具大大加速MySQL SQL语句优化(附源码)

发布时间:2019-06-24 21:35:28 所属栏目:编程 来源:宜信技术学院
导读:弁言 优化SQL,是DBA常见的事变之一。怎样高效、快速地优化一条语句,是每个DBA常常要面临的一个题目。在一般的优化事变中,我发明有许多操纵是在优化进程中必不行少的步调。然而这些步调一再性的执行,又会淹灭DBA许多精神。于是萌发了本身编写小器材,提

Join操纵行使内存地区巨细。只有当Join是ALL、index、range或index_merge时行使到Join Buffer。假如join语句较多,可以恰当增大join_buffer_size。必要留意到是,这个置魅针对单个Thread。每个Thread城市本身建设独立的Buffer,而不是整个体系共享的Buffer,不要配置过大而造成体系内存不敷。

tmp_table_size

假如内存内的姑且表高出该值,MySQL自动将它转换为硬盘上的MyISAM表。假如执行很多高级GROUP BY查询而且有大量内存,则可以增进tmp_table_size的值。

read_buffer_size

读查询操纵所能行使的缓冲区巨细。这个参数是针对单个Thead的。

4、优化器开关

在MySQL中,尚有一些参数是可以用来节制优化器举动的。

1) 参数声名

optimizer_search_depth

这个参数节制优化器在穷举执行打算时的限度。假如查询长时刻处于"statistics"状态,可以思量调低此参数。

optimizer_prune_level

默认是打开的,这让优化器会按照必要扫描的行数来抉择是否跳过某些执行打算。

optimizer_switch

这个变量包括了一些开启/封锁优化器特征的符号位。

示例 — 过问优化器举动(ICP特征)

廉价小器材大大加快MySQL SQL语句优化(附源码)

默认环境下,ICP特征是开启的。查察一下优化器举动。

廉价小器材大大加快MySQL SQL语句优化(附源码)

基于二级索引的过滤查询,行使了ICP特征,从Extra中的”Using index condition”可见。假如通过优化器开关,过问优化器举动,又会怎样呢?

廉价小器材大大加快MySQL SQL语句优化(附源码)

从Extra可见,ICP特征已经禁用。

5、体系状态(SHOW STATUS)

MySQL中也内置了一些状态,通过这些状态变量也可反应出语句执行的一些环境,利便定位题目。手工执行的话,可以在执行语句的前后别离执行SHOW STATUS呼吁,查察状态的变革。虽然,因状态变量许多,比拟起来不太利便,后头我先容的小器材,可以办理这个题目。

1) 状态变量

状态变量许多,这里先容几个。

Sort_merge_passes

排序算法已经执行的归并的数目。假如这个变量值较大,应思量增进sort_buffer_size体系变量的值。

Sort_range

在范畴内执行的排序的数目。

Sort_rows

已经排序的行数。

Sort_scan

通过扫描表完成的排序的数目。

Handler_read_first

索引中第一条被读的次数。读取索引头的次数,假如这个值很高,声名全索引扫描许多。

Handler_read_key

按照键读一行的哀求数。假如较高,声名查询和表的索引正确。

Handler_read_next

凭证键次序读下一行的哀求数。假如你用范畴束缚或假如执行索引扫描来查询索引列,该值增进。

Handler_read_prev

凭证键次序读前一行的哀求数。

Handler_read_rnd

按照牢靠位置读一行的哀求数。假如执行大量查询并必要对功效举办排序该值较高。则也许行使了大量必要MySQL扫描整个表的查询或毗连没有正确行使键。

Handler_read_rnd_next

在数据文件中读下一行的哀求数。假如正举办大量的表扫描,该值较高。凡是声名表索引不正确或写入的查询没有操作索引。

6、SQL机能说明器(Query Profiler)

MySQL的Query Profiler是一个行使很是利便的Query诊断说明器材,通过该器材可以获取一条Query在整个执行进程中多种资源的耗损环境,如CPU、IO、IPC、SWAP等,以及产生的PAGE FAULTS、CONTEXT SWITCHE等,同时还能获得该Query执行进程中的MySQL所挪用的各个函数在源文件中的位置。

1) 行使要领

开启

  1. mysql> select @@profiling;  
  2. mysql> set profiling=1; 

默认环境下profiling的值为0暗示MySQL SQL Profiler处于OFF状态,开启SQL机能说明器后profiling的值为1。

执行SQL语句

  1. mysql> select count(*) from t1; 

获取提纲信息

行使"show profile"呼吁获取当前体系中生涯的多个Query的profile的提纲信息。

  1. mysql> show profiles;  
  2. +----------+------------+-----------------------+  
  3. | Query_ID | Duration   | Query                  |  
  4. +----------+------------+-----------------------+  
  5. |        1 | 0.00039300 | select count(*) from t1 |  
  6. +----------+------------+-----------------------+ 

针对单个Query获取具体的profile信息

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读