MySQL中的執(zhí)行計(jì)劃是指MySQL對(duì)一條SQL語(yǔ)句的執(zhí)行過(guò)程中所采取的具體操作,包括使用哪些索引,訪問(wèn)哪些表,使用哪種連接方式等。通過(guò)執(zhí)行計(jì)劃,可以幫助我們分析SQL語(yǔ)句的性能瓶頸,優(yōu)化SQL語(yǔ)句的執(zhí)行效率。
通常通過(guò)使用EXPLAIN關(guān)鍵字來(lái)查看一條SQL語(yǔ)句的執(zhí)行計(jì)劃。
EXPLAIN SELECT * FROM table WHERE id=1;
執(zhí)行以上代碼可以得到以下結(jié)果:
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | table | const| PRIMARY | PRIMARY | 4 | const| 1 | Using index | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+
執(zhí)行計(jì)劃的每一行代表一個(gè)訪問(wèn)表的操作,其中的各個(gè)字段的含義如下:
- id:操作的序號(hào),如果是復(fù)合操作,序號(hào)越小,優(yōu)先級(jí)越高。
- select_type:查詢類型,常見的有SIMPLE(簡(jiǎn)單查詢)、PRIMARY(主查詢)、SUBQUERY(子查詢)等。
- table:要訪問(wèn)的表。
- type:訪問(wèn)方式,常用的包括const(使用常量值訪問(wèn)表)、eq_ref(使用唯一索引訪問(wèn)表)、ref(使用非唯一索引訪問(wèn)表)、range(使用范圍條件訪問(wèn)表)等。
- possible_keys:可能使用到的索引。
- key:實(shí)際使用到的索引。
- key_len:使用的索引字段長(zhǎng)度。
- ref:連接使用的列。
- rows:掃描的行數(shù)。
- Extra:其它信息,例如Using index、Using where等。
通過(guò)分析執(zhí)行計(jì)劃,我們可以得出以下結(jié)論:
- 盡量使用唯一索引或者復(fù)合索引來(lái)加快查詢速度。
- 盡量避免全表掃描,使用索引來(lái)代替。
- 盡量減少連接表的操作。