これは私を狂わせています。imdbpyを使用してimdbdbをダンプしました。映画の最初の文字で俳優のデータを利用できる米国の映画を見つけようとしています。
以下は、actoデータなしで映画をフェッチするクエリの例です。これは非常に高速に実行されます。
SELECT DISTINCT title.id,title.title,title.production_year
FROM title
INNER JOIN movie_info ON
(movie_info.movie_id = title.id
AND
movie_info.info_type_id = 8
AND
movie_info.info = 'USA')
WHERE title LIKE 'a%'
AND title.kind_id = 1
LIMIT 75
キャストデータはと呼ばれる別のテーブルに保存され、cast_info
約2,200万件のレコードが含まれています。このnr_order
列には、映画の俳優のクレジットの順序が含まれています。たとえば、トムハンクスはフォレストガンプで1になります。通常、それぞれに数十の行がありますmovie_id
。
したがって、アクターデータが使用可能かどうかを確認するには、その特定のに対してnullではない行が少なくとも1つ存在する必要がありますmovie_id
。aのすべての値がnullnr_order
のmovie_id
場合、必要なデータが含まれていません。
この情報を取得しようとするには、以下のクエリを使用します。
SELECT DISTINCT title.id,title.title,title.production_year
FROM title
INNER JOIN movie_info ON
(movie_info.movie_id = title.id
AND
movie_info.info_type_id = 8
AND
movie_info.info = 'USA')
INNER JOIN cast_info ON
(cast_info.movie_id = title.id
AND
cast_info.nr_order = 1)
WHERE title LIKE 'a%'
AND title.kind_id = 1
LIMIT 75
何らかの理由で、クエリが非常に遅くなります。最初のクエリには0.3〜.7、2番目のクエリには約6〜10秒かかります。にインデックスを追加しましたcast_info
。nr_order
しかし、それは役に立ちませんでした。
EXPLAIN出力:
+----+-------------+-----------+-------+--------------------------------------------------+-------------------+---------+--------------+-------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+-------+--------------------------------------------------+-------------------+---------+--------------+-------+-----------------------------+
| 1 | SIMPLE | title | range | PRIMARY,title_idx_title,fk_kind_type_id_4 | title_idx_title | 257 | NULL | 132801| Using where; Using temporary|
| 1 | SIMPLE | movie_info| ref | ovie_info_idx_mid,info_type_id movie_info_idx_mid| movie_info_idx_mid| 4 | imdb.title.id| 4 | Using where; Distinct |
| 1 | SIMPLE | table1 | ref | cast_info_idx_mid,nr_order | cast_info_idx_mid | 4 | imdb.title.id| 12 | Using where; Distinct |
+----+-------------+-----------+-------+--------------------------------------------------+-------------------+---------+--------------+-------+-----------------------------+
どんなアイデアもとても役に立ちます!
編集:最初のクエリからの説明
+----+-------------+-----------+-------+--------------------------------------------------+-------------------+---------+--------------+-------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+-------+--------------------------------------------------+-------------------+---------+--------------+-------+-----------------------------+
| 1 | SIMPLE | title | range | PRIMARY,title_idx_title,fk_kind_type_id_4 | title_idx_title | 257 | NULL | 132801| Using where; Using temporary|
| 1 | SIMPLE | movie_info| ref | ovie_info_idx_mid,info_type_id movie_info_idx_mid| movie_info_idx_mid| 4 | imdb.title.id| 4 | Using where; Distinct |
+----+-------------+-----------+-------+--------------------------------------------------+-------------------+---------+--------------+-------+-----------------------------+