2010-05-26 107 views
1

有4個表:MySql:使這個查詢更快......有沒有辦法?

  • 書籍:編號,名稱,作者,ECC ...
  • 類別:ID,名稱
  • 庫:ID,姓名,街道,城市,ECC ..
  • bookcorr:book_id,category_id,library_id

ID是所有密鑰。

查詢必須顯示具有定義庫中書籍數量的類別。爲前:

庫X

浪漫(50)

黃(40)

科學(30)

這是我的查詢:

SELECT category.id 
    , category.name 
    , count(*)  AS tot 
    FROM bookcorr 
    JOIN category 
    ON category.id = bookcorr.category_id 
WHERE bookcorr.library_id = 'x' 
GROUP BY bookcorr.category_id 
ORDER BY tot DESC 

它仍然很慢,有沒有辦法讓結果更快?

+2

你試過在聲明上運行EXPLAIN嗎? 這是理解EXPLAIN的好帖子:http://www.mysqlperformanceblog.com/2006/07/24/extended-explain/ – 2010-05-26 14:10:10

+0

http://stackoverflow.com/questions/2914145/mysql-make-this- query-faster-is-there-a-way-part-2 – robert 2010-05-26 15:04:51

回答

1

你對這些表有什麼指數?該查詢表明bookcorr應該在(category_id, library_id)上有索引。

您的查詢不使用BooksLibrary ...

+0

「id」是所有索引。在bookcorr中,所有字段都是索引。 是的,這個查詢不使用書籍或圖書館,但其他查詢是... – robert 2010-05-26 14:11:37

+0

@robert:你可以在'bookcorr'上創建一個包含'category_id' *和*'library_id'的組合索引嗎? – FrustratedWithFormsDesigner 2010-05-26 14:13:09

+0

你懂了!我創建了一個複合索引,速度提高了10倍:D之前:現在0,4秒0,04秒 謝謝! – robert 2010-05-26 14:19:40

1

更改查詢,以便它會在領先的表的列組,以避免Using temporary

SELECT category.id, category.name, COUNT(*) AS tot 
FROM category 
JOIN bookcorr 
ON  bookcorr.category_id = category.id 
WHERE bookcorr.library_id = 'x' 
GROUP BY 
     category.id 
ORDER BY 
     tot DESC 

,並確保你有一個索引bookcorr (library_id, category_id)

+0

此外,這個查詢使結果更快!謝謝 – robert 2010-05-26 14:24:43

相關問題