优化大表的主键搜索

时间:2013-01-18 01:47:14

标签: mysql sql optimization query-optimization

我有一个包含大约100,000条记录的MySQL表。当我尝试使用主键(unsigned int)从该表中选择大约20行时,执行大约需要一秒钟。有没有办法优化这个?

表:电影

Column          Type        Null    Default 
film_id         int(11)     No       
film_name       varchar(45) No       
film_overview   text        No       
film_tagline    varchar(150)Yes     NULL     
release_date    date        Yes     NULL     
api_id          int(11)     No       
category_id     int(11)     No      0 

影片索引

Keyname         Type    Unique  Packed  Column      Cardinality Collation   Null    Comment
PRIMARY         BTREE   Yes     No      film_id     110236      A           No  
api_id          BTREE   No      No      api_id      110236      A           No  
film_id         BTREE   No      No      film_id     110236      A           No  
category_id     BTREE   No      No      category_id 4           A           No  

EXPLAIN

id  select_type         table           type    possible_keys   key     key_len     ref     rows    Extra
1   PRIMARY             films           ALL     NULL            NULL    NULL        NULL    115029  Using where
2   DEPENDENT SUBQUERY  popular_films   ALL     NULL            NULL    NULL        NULL    18      Using where

QUERY

SELECT film_name FROM `films` 
  WHERE film_id in (SELECT film_id FROM popular_films); 

1 个答案:

答案 0 :(得分:2)

现在您已经添加了查询,答案很简单:只需使用连接:

SELECT films.film_name
FROM `films`
JOIN popular_films
  ON popular_films.film_id = films.film_id;

看起来你的popular_films表与电影的结构相同,所以可能不应该是一个单独的表。