2011-07-14 38 views
0
EXPLAIN SELECT `test_versions`.* FROM `test_versions` WHERE (`test_versions`.test_id IN (363,534,271,274,365,390,404,405,406,407,409,182,201,1386,1387,1388,1389,1390,1307,1308,1309,1310,1311,424,423,393,361,357,355,353,352,351,350,347,209,339,340,345,223,305,66,307,303,221,227,228,229,230,231,210,214,215,217,218,219,234,235,236,237,238,239,232,233,212,100,59)) 


Id select_type table   type possible_keys     key key_len ref row Extra 
'1', 'SIMPLE', 'test_versions', 'ALL', 'fk_test_versions_on_test_id', NULL, NULL, NULL, '76', 'Using where; Using filesort' 

它没有使用已经指定的索引。我不想明确传递USE INDEX。这个查询有什么问题?为什么此查询不使用索引?

+3

非常相关:http://stackoverflow.com/questions/586381/mysql-not-using-indexes-with-where-in-clause – Mat

回答

0

使用joins当你想要一个连接(它可以使用索引),但不需要修改任何对象,并且当你想要加载但需要修改某些对象时使用includes

相关问题