mysql>EXPLAIN SELECT * FROM customers WHERE city='New York'; +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+ | 1 | SIMPLE | customers | NULL | ref | city | city | 10 | const| 1 | 100.00 | Using where | +----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+
在上面的查询计划中,大家可以看到 ID 为 1 的操作符表示 SELECT 查询的整个过程。接下来,大家可以看到 ID 为 1 的操作符只有一个子操作符,其 ID 为 SIMPLE,表示该查询是一个简单的 SELECT 查询。
在执行计划中,每个操作符都有其具体的目的。以下是一些常见的操作符及其用途:
- SELECT_TYPE:查询类型,UNION、DEPENDENT UNION、PRIMARY 等。
- TABLE:查询使用的表。
- TYPE:表的连接类型(如 ALL、INDEX、RANGE 等)。
- POSSIBLE_KEYS:查询可能使用的索引。
- KEY:实际使用的索引。
- KEY_LEN:实际使用的索引的长度。
- REF:连接使用的列。
- ROWS:预计扫描的行数。
- FILTERED:过滤行的百分比。
- EXTRA:查询的其他信息,如使用的缓存类型、锁定状态等。
因此,在进行查询优化时,查询计划中的每个操作符都需要仔细观察,以了解 MySQL 是如何评估和处理查询的。通过分析和理解查询计划,可以优化查询,提高查询效率和性能。