|
回复 #16 棉花糖ONE 的帖子
这个我也想过,但15,16,17,18,19,20是另外一个查询的结果,通过程序赋值进来的,遇到几十个数字的话,那就比较复杂了。
也想过新增一列可以起到ID作用的列。
而且有一点很奇怪,对于子查询,引擎选择使用的索引也是主键。该表有41万的数据。catid in (15,16,17,18,19,20)的结果是4514个。
mysql> explain SELECT * TABLEA WHERE id in (SELECT id FROM TABLEA WHERE catid IN (15,16,17,18,19,20)) order by id limit 8 ;
+----+--------------------+--------+-----------------+--------------------------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+--------+-----------------+--------------------------------+---------+---------+------+------+-------------+
| 1 | PRIMARY | TABLEA | index | NULL | PRIMARY | 3 | NULL | 8 | Using where |
| 2 | DEPENDENT SUBQUERY | TABLEA | unique_subquery | PRIMARY,listorder,catid,catid2 | PRIMARY | 3 | func | 1 | Using where |
+----+--------------------+--------+-----------------+--------------------------------+---------+---------+------+------+-------------+
这个子查询的rows最近搞得我是真不敢相信了。
我的疑惑是,子查询走主键索引真的比较快吗?还是又是引擎的错误判断。
[ 本帖最后由 wanan_YLF 于 2011-3-18 11:48 编辑 ] |
|