我在表a上有以下INDEX:
SHOW INDEX FROM a
Table,Non_unique,Key_name,Seq_in_index,Column_name,Collation,Cardinality,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'
我究竟做错了什么?
1 回答
为了获得更好的性能,您可以使用连接而不是基于子选择结果的IN子句
对于索引,您应该使用与JOIN子句中涉及的列的复合索引,例如对于表b:
对于表,OC_ID索引就足够了