2013-04-21 36 views
1

我有一個查詢朗MySQL查詢

SELECT * 
    FROM tbl_auction_listing 
    JOIN tbl_user ON tbl_auction_listing.user_id = tbl_user.user_id 
    JOIN tbl_subject ON tbl_auction_listing.subject_id = tbl_subject.subject_id 
    JOIN tbl_medium ON tbl_auction_listing.medium_id = tbl_medium.medium_id 
    JOIN tbl_style ON tbl_auction_listing.style_id = tbl_style.style_id 
WHERE tbl_auction_listing.item_number = '2736503389’ 

這是造成一些問題,該網站的速度,有時會到現場崩潰的地步。將它分成多個查詢會更好嗎?

指標

tbl_auction_listing 0 PRIMARY 1 auction_listing_id A 18739    BTREE  
tbl_auction_listing 1 Listing - subject_id 1 subject_id A 32   YES BTREE  
tbl_auction_listing 1 Listing - medium_id 1 medium_id A 32   YES BTREE  
tbl_auction_listing 1 Listing - style_id 1 style_id A 38   YES BTREE  
tbl_auction_listing 1 Listing - colour_id 1 colour_id A 30   YES BTREE  
tbl_auction_listing 1 Listing - user_id 1 user_id A 1441    BTREE  
tbl_auction_listing 1 Listing - price_id 1 price_id A 20   YES BTREE  
tbl_auction_listing 1 Listing - status 1 status A 8   YES BTREE  
+0

你的索引是什麼?解釋計劃是什麼?你真的需要從所有這些表中選擇_everything_嗎? – Ben 2013-04-21 12:50:48

+0

另外,什麼是長輪詢部分?你是在無限循環中執行這個查詢還是什麼?這肯定會導致任何服務器崩潰。 – 2013-04-21 12:52:41

+0

是的,我確實需要從所有表格中選擇數據。並不是所有的信息,但5個表中的3個都有2列或3列。 – puks1978 2013-04-21 12:53:45

回答

2

您可以:
1.增加默認的HTTP請求超時Web服務器
2.建立在tbl_auction_listing.item_number指數
3.緩存一些這些表的經常不太容易改變
4.增加應用程序和db服務器上的sql查詢超時時間
5.非規範化數據庫

+0

點2的+1。 – 2013-04-21 13:14:15

0

不,您最好將這個查詢分解爲多個查詢。

將索引添加到數據庫以加快查詢會更好。每個子表的主鍵都應該有一個索引。例如,tbl_style應具有tbl_style(style_id)等的索引。

您的索引是「錯誤的方向」。他們應該在參考表上,而不是(或不只)在主表上。

+0

嗨,是的,他們也是。 – puks1978 2013-04-21 13:01:56