学Web项目开发,就选PHP语言;学数据库,就选MySQL。MySQL是一款非常优秀的自由软件,由瑞士的MySQLAB公司开发,是一款真正快速、多用户、多线程的SQL数据库服务器。MySQL数据库是世界上最流行的数据库之一。全球...
本书以初学者为核心,全面讲解MySQL数据库技术。在内容安排上由浅入深,让读者循序渐进地掌握编程技术;在内容讲解上结合丰富的图解和形象的比喻,帮助读者理解晦涩难懂的技术;在内容形式上附有大量的注意、技巧...
使用EXPLAIN命令阅读并理解MySQL查询执行计划(QEP)是获取优化SQL语句的信息的不可或缺的途径之一。把这个命令和本书中介绍的其他来源的信息相结合就能够确保你掌握足够的数据来做出合理的选择。
理解你的应用程序(包括技术和实现可能性)和优化SQL语句同等重要。下面给出一个从父子关系中获取孤立的父辈记录的商业需求的例子。这个查询可以用三种不同的方式构造。尽管会产生相同的结果,但QEP会显示三种不同...
type列代表QEP中指定的表使用的连接方式。下面是最常用的几种连接方式: const当这个表最多只有一行匹配的行时出现 system 这是const的特例,当表只有一个row时会出现 eq_ref这个值...
filtered列给出了一个百分比的值,这个百分比值和rows列的值一起使用,可以估计出那些将要和QEP中的前一个表进行连接的行的数目。前一个表就是指id列的值比当前表的id小的表。这一列只有在EXPLAIN EXTENDED语句...
ref列可以被用来标识那些用来进行索引比较的列或者常量。
id列是在QEP中展示的表的连续引用。
Extra列提供了有关不同种类的MySQL优化器路径的一系列额外信息。Extra列可以包含多个值,可以有很多不同的取值,并且这些值还在随着MySQL新版本的发布而进一步增加。下面给出常用值的列表。你可以从下面的地址找...
partitions列代表给定表所使用的分区。这一列只会在EXPLAIN PARTITIONS语句中出现。
select_type列提供了各种表示table列引用的使用方式的类型。最常见的值包括SIMPLE、PRIMARY、DERIVED和UNION。其他可能的值还有UNION RESULT、DEPENDENT SUBQUERY、DEPENDENT UNION、UNCACHEABLE UNION以及U...
table列是EXPLAIN命令输出结果中的一个单独行的唯一标识符。这个值可能是表名、表的别名或者一个为查询产生临时表的标识符,如派生表、子查询或集合。下面是QEP中table列的一些示例:table: itemtable: <deriv...
key_len列定义了用于SQL语句的连接条件的键的长度。此列值对于确认索引的有效性以及多列索引中用到的列的数目很重要。此列的一些示例值如下所示:key_len: 4 // INT NOT NULLkey_len: 5 // INT NULLkey...
possible_keys列指出优化器为查询选定的索引。一个会列出大量可能的索引(例如多于3个)的QEP意味着备选索引数量太多了,同时也可能提示存在一个无效的单列索引。可以用第2章详细介绍过的SHOW INDEXES命令来检查索...
rows列提供了试图分析所有存在于累计结果集中的行数目的MySQL优化器估计值。QEP很容易描述这个很困难的统计量。查询中总的读操作数量是基于合并之前行的每一行的rows值的连续积累而得出的。这是一种嵌套行算法。...
key列指出优化器选择使用的索引。一般来说SQL查询中的每个表都仅使用一个索引。也存在索引合并的少数例外情况,如给定表上用到了两个或者更多索引。下面是QEP中key列的示例:key: item_idkey: NULLkey: first...
MySQL EXPLAIN命令能够为SQL语句中的每个表生成以下信息:mysql> EXPLAIN SELECT * FROM inventory-> WHERE item_id = 16102176\G********************* 1. row ***********************id: 1sele...
MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL优化器是如何执行SQL语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。在最后的...
在索引中正确的定义列(包括定义列的顺序和位置)能够改变索引的实际使用效果。好的索引能够为一个执行缓慢的查询带来巨大的性能提升。索引也可能使原来执行很快的查询的执行时间减少若干毫秒。在高并发系统中,将...
尽管索引可以用来限制需要查询的行数,但如果MySQL需要获取大量行中的更多列的数据,那么创建具有更小行宽度的小型索引则会更加高效。就像在创建覆盖索引的示例里面看到的那样,使用一个索引来做更多的工作可以显...