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

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

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

子查询中的返回功效字段组合是一个索引(或索引组合),但不是一个主键或独一索引。这种毗连范例相同unique_subquery。它用子查询来取代IN,不外它用于在子查询中没有独一索引的环境下。

  •  range

索引范畴扫描。只有在给定范畴的记录才会被取出来,操作索引来取得一笔记录。

  •  index

全索引扫描。毗连范例跟ALL一样,差异的是它只扫描索引树。它凡是会比ALL快点,由于索引文件凡是比数据文件小。MySQL在查询的字段常识单独的索引的一部门的环境下行使这种毗连范例。

  •  fulltext

全文索引扫描。

  •  all

全表扫描。

possible_keys

该字段是指MySQL在搜刮表记录时也许行使哪个索引。假如没有任何索引可以行使,就会表现为null。

key

查询优化器从possible_keys中所选择行使的索引。key字段表现了MySQL现实上要用的索引。当没有任何索引被用到的时辰,这个字段的值就是NULL。

key_len

被选中行使索引的索引键长度。key_len字段表现了MySQL行使索引的长度。当key字段的值为NULL时,索引的长度就是NULL。

ref

列出是通过常量,照旧某个表的某个字段来过滤的。ref字段表现了哪些字段可能常量被用来和key共同从表中查询记录出来。

rows

该字段表现了查询优化器通过体系网络的统计信息估算出来的功效集记录条数。

Extra

该字段表现了查询中MySQL的附加信息。

filtered

这个列式在MySQL5.1里新加进去的,当行使EXPLAIN EXTENDED时才会呈现。它表现的是针对内外切合某个前提(WHERE子句或联接前提)的记录数的百分比所作的一个气馁估算。

3) SQL改写

EXPLAIN除了可以表现执行打算外,还可以表现SQL改写。所谓SQL改写,是指MySQL在对SQL语句举办优化前,会基于一些原则举办语句的改写,以利便后头的优化器举办优化天生更优的执行打算。该成果是通过EXPLAIN EXTENDED+SHOW WARNINGS共同行使。下面通过示例声名一下。

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

从上面示例中,可看到原有语句中的IN子查询被改写成为表间关联的方法。

2、统计信息

查察统计信息也是优化语句中必不行少的一步。通过统计信息可以快速相识工具的存储特性怎样。下面声名首要的两类统计信息——表、索引。

1) 表统计信息 — SHOW TABLE STATUS

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

  •  Name:表名
  •  Engine:表的存储引擎范例(ISAM、MyISAM或InnoDB)
  •  Row_format:行存储名目(Fixed-牢靠的、Dynamic-动态的或Compressed-压缩的)
  •  Rows:行数目。在某些存储引擎中,譬喻MyISAM和ISAM他们存储了准确的记录数。不外其他存储引擎中,它也许只是近似值。
  •  Avg_row_length:均匀行长度。
  •  Data_length:数据文件的长度。
  •  Max_data_length:数据文件的最大长度。
  •  Index_length:索引文件的长度。
  •  Data_free:已分派但未行使了字节数。
  •  Auto_increment:下一个autoincrement(自动加1)值。
  •  Create_time:表被缔造的时刻。
  •  Update_time:数据文件最后更新的时刻。
  •  Check_time:最后对表运行一个搜查的时刻。执行mysqlcheck呼吁后更新,仅对MyISAM有用。
  •  Create_options:特殊留给CREATE TABLE的选项。
  •  Comment:当缔造表时,行使的注释(或为什么MySQL不能存取表信息的一些信息)。
  •  Version:数据表的'.frm'文件版本号。
  •  Collation:表的字符集和校正字符集。
  •  Checksum:及时的校验和值(假若有的话)。

3、索引统计信息 — SHOW INDEX

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

  •  Table:表名。
  •  Non_unique:0,假如索引不能包括一再。
  •  Key_name:索引名
  •  Seq_in_index:索引中的列次序号,从1开始。
  •  Column_name:列名。
  •  Collation:列奈何在索引中被排序。在MySQL中,这可以有值A(升序)或NULL(不排序)。
  •  Cardinality:索引中独一值的数目。
  •  Sub_part:假如列只是部门被索引,索引字符的数目。当整个字段都做索引了,那么它的值是NULL。
  •  Packed:暗示键值是怎样压缩的,NULL暗示没有压缩。
  •  Null:当字段包罗NULL的记录是YES,它的值为,反之则是''。
  •  Index_type:行使了哪种索引算法(有BTREE、FULLTEXT、HASH、RTREE)。
  •  Comment:备注。
  •  体系参数:体系参数也会影响语句的执行服从。查察体系参数,可行使SHOW VARIABLES呼吁。

1) 参数声名

体系参数许多,下面先容几个。

sort_buffer_size

排序区巨细。其巨细直接影响排序行使的算法。假如体系中排序都较量大、内存富裕且并发量不是很大的环境,可以恰当增进此参数。这个参数是针对单个Thead的。

join_buffer_size

(编辑:湖南网)

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

热点阅读