大家可以通过EXPLAIN关键字来查看MySQL执行计划,例如:
EXPLAIN SELECT * FROM user WHERE id = 1;
该查询语句的执行计划如下所示:
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | 1 | SIMPLE | user | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
上面的执行计划中,id表示查询语句中每个SELECT、UNION、JOIN等操作所对应的数字序号,SELECT语句中只有一个SELECT操作,所以id的值为1。
select_type表示查询的类型,SIMPLE表示这是一个简单查询,没有使用UNION或者子查询。
table表示查询操作所关联的表名,这里是user表。
type表示访问类型,const表示这个查询仅有一行结果,可以通过索引快速定位到指定行。这里使用的索引是PRIMARY,即主键。
possible_keys表示可能使用到的索引列表,这里只有PRIMARY。
key表示实际使用的索引,这里也是PRIMARY。
key_len表示使用的索引长度。
ref表示使用的索引所关联的列名。
rows表示扫描的行数,这里只有1行。
Extra列给出了关于查询执行的一些额外信息,例如本例中的Using index表示这个查询可以使用索引加速。
要求MySQL执行计划的SQL语句越复杂,执行计划会给出更详细的信息。大家可以通过分析执行计划来优化SQL语句,例如添加索引、修改查询方式等,进而提高查询性能。