廉价小器材大大加快MySQL SQL语句优化(附源码)
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特征) 默认环境下,ICP特征是开启的。查察一下优化器举动。 基于二级索引的过滤查询,行使了ICP特征,从Extra中的”Using index condition”可见。假如通过优化器开关,过问优化器举动,又会怎样呢? 从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) 行使要领 开启
默认环境下profiling的值为0暗示MySQL SQL Profiler处于OFF状态,开启SQL机能说明器后profiling的值为1。 执行SQL语句
获取提纲信息 行使"show profile"呼吁获取当前体系中生涯的多个Query的profile的提纲信息。
针对单个Query获取具体的profile信息 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |