我在表a上具有以下索引:
SHOW INDEX FROM a
表,非唯一,键名,Seq_in_index,列名,排序规则,基数,子部分,压缩,空,Index_type,注释,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'
我在做什么错了?
答案 0 :(得分:1)
为了获得更好的性能,您可以基于子选择结果使用联接而不是IN子句
SELECT *
FROM a
INNER JOIN b ON a.OC_ID = b.OC_ID and b.tteci = "54301"
对于索引,您应该使用包含JOIN子句中涉及的列的复合索引,例如表b:
(tteci, OC_ID)
对于表a的OC_ID索引已足够