22.1 嵌套查询的优化
当SQL语句存在嵌套查询时,MySQL会生成临时表来存储子查询的结果数据,外层查询会从临时表中读取数据,待整个查询完毕后,会删除临时表,整个过程比较耗时。此时,可以使用JOIN语句代替嵌套查询来提升数据库的查询性能。
例如,查询t_goods数据表中t_category字段不在t_goods_category数据表中的数据,使用嵌套查询如下:
mysql> EXPLAIN SELECT * FROM t_goods
-> WHERE t_category NOT IN
-> (SELECT t_category FROM t_goods_category) \G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: t_goods
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 14
filtered: 100.00
Extra: Using where
*************************** 2. row ***************************
id: 2
select_type: SUBQUERY
table: t_goods_category
partitions: NULL
type: ALL
possible_keys: NULL