0

約100,000レコードのMySQLテーブルがあります。主キー(unsigned int)を使用してこのテーブルから約20行を選択しようとすると、実行に約1秒かかります。これを最適化する方法はありますか?

表:映画

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  

説明

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); 
4

1 に答える 1

2

クエリを追加したので、答えは簡単です。結合を使用するだけです。

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

あなたのpopular_filmsテーブルはfilmsと同じ構造を持っているように見えるので、おそらく別のテーブルであってはなりません。

于 2013-01-18T03:30:22.990 に答える