2014-11-14 192 views
0

大家好我正在使用phpmyadmin數據庫。每當我嘗試執行查詢時,都需要10分鐘以上的時間來顯示結果。有什麼辦法可以加快速度。請回復。mysql查詢執行時間太長

查詢是

SELECT ib.*, b.brand_name, m.model_name, 
     s.id as sale_id, br.branch_code,br.branch_name,r.rentry_date,r.id as rid 
    from in_book ib 
    left join brand b on ib.brand_id=b.id 
    left join model m on ib.vehicle_id=m.id 
    left join re_entry r on r.in_book_id=ib.id 
    left join sale s on ib.id=s.in_book_id 
    left join branch br on ib.branch_id=br.id 
where ib.id !='' 
    and ib.branch_id='65' 
group by ib.id 
order by r.id ASC, 
     count(r.in_book_id) DESC , 
     ib.purchaes_date ASC, 
     ib.id ASC 

有近7桌

+1

你的查詢和表結構在哪裏? –

+1

您可以使用EXPLAIN命令獲取查詢在MySQL中使用的索引的詳細信息,以及表格詳細信息,您通常可以提高性能。但沒有基本的細節,我們可以做的不多。 – Kickstart

+0

你在濫用非標準的MySQL擴展到'GROUP BY'。當你這樣做時,幾乎不可能猜到(對於我們來說StackOverflow或者MySQL服務器)你想從查詢中得到什麼。請閱讀這個。 http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html –

回答

0

確保您在每次使用連接表鍵得到了一個index

http://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html

最好的方式來提高SELECT操作的性能是在一個或多個被查詢測試的列創建索引。索引條目就像指向錶行的指針,允許查詢快速確定哪些行匹配WHERE子句中的條件,並檢索這些行的其他列值。所有的MySQL數據類型都可以被索引。

..這當然也適用於JOIN條件。

0

你沒有列出任何這樣的指標,但是,我會用下面的建議指標開始

table  index 
in_book (branch_id, id, brand_id, vehicle_id) 
brand  (id, brand_name) 
model  (id, model_name) 
re_entry (in_book_id, id, reentry_date) 
sale  (in_book_id, id) 
branch  (id) 

而且,使用MySQL,你可以使用它告訴引擎查詢一個特殊的關鍵字「STRAIGHT_JOIN」按照您選擇表格的順序...儘管您正在進行LEFT JOIN,但我認爲這不重要,因爲它看起來次要表格都是查找類型的表格,in_book是您的主要表格。但只是一個嘗試它將..

SELECT STRAIGHT_JOIN (...rest of query...)