2013-01-18 67 views
0

我有一個大約100,000條記錄的MySQL表。當我嘗試使用主鍵(無符號整數)從該表中選擇約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

請顯示模式,查詢和'EXPLAIN'輸出。 – eggyal

+1

**您需要向我們展示表和索引定義。**診斷慢查詢需要全表和索引定義,而不僅僅是描述或釋義。也許你的表格定義不好。也許索引沒有正確創建。也許你沒有一個你認爲你做過的那個專欄的索引。沒有看到表和索引定義,我們不能說。如果你知道如何做一個'EXPLAIN',把結果放在問題中。 –

+0

增加額外信息 – Undefined

回答

2

現在你已經添加的查詢,答案很簡單:只需使用一個連接:

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

它看起來像你的popular_films表具有相同的結構,薄膜和所以可能不應該是一個單獨的表。