【发布时间】:2018-12-09 00:17:01
【问题描述】:
我在表 a 上有以下 INDEX:
SHOW INDEX FROM a
表、Non_unique、Key_name、Seq_in_index、Column_name、排序规则、基数、Sub_part、Packed、Null、Index_type、Comment、Index_comment
a、'1'、'oc_id'、'1'、'OC_ID'、'A'、'19'、NULL、NULL、'YES'、'BTREE'、''、''
explain 计划表明它正在被使用:
EXPLAIN SELECT * FROM a
WHERE OC_ID IN (
5841)
'1', 'SIMPLE', a, 'ref', 'oc_id,oc1', 'oc_id', '6', 'const', '121080', 'Using where'
但是使用子查询却没有使用:
EXPLAIN SELECT * FROM a
WHERE OC_ID IN (SELECT OC_ID FROM b WHERE tteci = "54301")
'1', 'PRIMARY', a, 'ALL', NULL, NULL, NULL, NULL, '701145408', 'Using where'
'2', 'DEPENDENT SUBQUERY', b, 'index_subquery', 'OC_ID,tteci1', 'OC_ID', '6', 'func', '1', 'Using where'
我做错了什么?
【问题讨论】:
-
第一步是消除子查询,将其替换为连接(提示:在 OC_ID 上连接
a和b,在 tteci 上过滤b) .然后要么 1)MySQL 将“高兴”并选择所需的索引,要么 2)问题将不同,因为子查询不再相关/不存在。 -
有些事情没有意义; 请提供
SHOW CREATE TABLE。
标签: mysql optimization indexing