一. EXPLAIN 语法
1.
EXPLAIN tbl_name|SELECT select_options
EXPLAIN tbl_name和DESCRIBE tbl_name的作用是一样的,用于显示表结构等信息。
当我们在select语句前加上EXPLAIN后,Mysql将告诉我们它是如何处理select语句的,提供表之间的联结方式、使用索引等有关信息。
二. 测试环境简单介绍
为了节省创建表的时间,我用了joomla的文章表做测试,因为要演示优化过程,所以我事先删除了表里除主键之外的所有索引。
这里用到了三个表: www.2cto.com
mysql> explain jos_content;
+------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------------------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | | |
| alias | varchar(255) | NO | | | |
| title_alias | varchar(255) | NO | | | |
| introtext | mediumtext | NO | | NULL | |
| fulltext | mediumtext | NO | | NULL | |
| state | tinyint(3) | NO | | 0 | |
| sectionid | int(11) unsigned | NO | | 0 | |
| mask | int(11) unsigned | NO | | 0 | |
| catid | int(11) unsigned | NO | | 0 | |
| created | datetime | NO | | 0000-00-00 00:00:00 | |
| created_by | int(11) unsigned | NO | | 0 | |
| created_by_alias | varchar(255) | NO | | | |
| modified | datetime | NO | | 0000-00-00 00:00:00 | |
| modified_by | int(11) unsigned | NO | | 0 | |
| checked_out | int(11) unsigned | NO | | 0 | |
| checked_out_time | datetime | NO | | 0000-00-00 00:00:00 | |
| publish_up | datetime | NO | | 0000-00-00 00:00:00 | |
| publish_down | datetime | NO | | 0000-00-00 00:00:00 | |
| images | text | NO | | NULL | |
| urls | text | NO | | NULL | |
| attribs | text | NO | | NULL | |
| version | int(11) unsigned | NO | | 1 | |
| parentid | int(11) unsigned | NO | | 0 | |
| ordering | int(11) | NO | | 0 | |
| metakey | text | NO | | NULL | |
| metadesc | text | NO | | NULL | |
| access | int(11) unsigned | NO | | 0 | |
| hits | int(11) unsigned | NO | | 0 | |
| metadata | text | NO | | NULL | |
+------------------+------------------+------+-----+---------------------+----------------+
30 rows in set (0.00 sec)
mysql> select count(*) from jos_content;
+----------+
| count(*) |
+----------+
| 46585 |
+----------+
1 row in set (0.00 sec)
mysql> desc jos_categories;
+------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------------------+----------------+ www.2cto.com
| id | int(11) | NO | PRI | NULL | auto_increme