2012-09-22 111 views
-1

我從我的網站託管公司獲得通知,優化我的網站中的MySQL查詢。他們告訴我,共享主機中不允許運行MySql查詢超過15秒,而該域的mysql查詢運行時間超過75秒。如何優化mysql查詢

但我不知道該怎麼做,以及在哪裏更改以優化MySQL查詢。請幫我解決這個問題。

用戶@主機:khabarin_suprusr [khabarin_suprusr] @本地[]
Query_time:76.546533 Lock_time:1.408959 Rows_sent:5 Rows_examined:3038

use khabarin_portal3; 
SET timestamp=1347378163; 
SELECT * 
FROM (`art_conts`) 
JOIN `art_cats` ON `art_cats`.`cat_id`=`art_conts`.`cat_id` 
JOIN `art_secs` ON `art_secs`.`sec_id`=`art_cats`.`sec_id` 
WHERE `art_conts`.`cont_status` = 'public' 
ORDER BY `cont_id` desc 
LIMIT 5; 

用戶@主機:khabarin_suprusr [khabarin_suprusr] @本地[] **強文本 Query_time:54.002604 Lock_time:1.403354 Rows_sent:1 Rows_examined:3033 **

use khabarin_portal3; 
SET timestamp=1347376289; 

用戶@主機:khabarin_suprusr [khabarin_suprusr] @本地[]
Query_time:24.436448 Lock_time:13.889496 Rows_sent:1 Rows_examined:0

use khabarin_portal3; 
SET timestamp=1347376151; 
SELECT COUNT(*) AS `numrows` 
FROM (`art_conts`) 
JOIN `art_cats` ON `art_cats`.`cat_id`=`art_conts`.`cat_id` 
JOIN `art_secs` ON `art_secs`.`sec_id`=`art_cats`.`sec_id` 
WHERE `art_conts`.`cat_id` = '59' 
AND `art_conts`.`cont_status` = 'public' 
ORDER BY `cont_id` desc; 

回答

1

良好的開端是在前面使用Keword的 「解釋」的SELECT語句。

大多數情況下存在不正確或未使用的索引。

如果可能,請避免在語句中使用「*」,並只選擇您真正需要的行和列。

+0

「如果有可能避免‘*’的語句,並只選擇真正需要的行。」 這是神話,它不是真的。 * – confiq

+0

@confiq沒有問題那麼我該怎麼做? – Rohan

+0

EXPLAIN是一個好開始。之後,將索引放在鍵上。 然後移動到專用/ VPS(如果需要) – confiq

0

嘗試在art_conts的指標如下:

cont_id desc, 
cont_status, 
cat_id, 
sec_id 
+0

好吧,我這樣做,但現在我該如何檢查它的查詢時間? – Rohan

+0

在運行查詢之前和之後選擇now() – emperorz