-1

Web ホスティング会社から、私の Web サイトで MySQL クエリを最適化するようにという通知が届きました。共有ホスティングでは、MySql クエリを 15 秒以上実行することは許可されていませんが、このドメインの mysql クエリは 75 秒以上実行されているとのことでした。

しかし、MySQL クエリを最適化するために何をすべきか、どこを変更すればよいかわかりません。この問題を解決するのを手伝ってください。

User@Host: khabarin_suprusr[khabarin_suprusr] @ localhost []
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;

User@Host: khabarin_suprusr[khabarin_suprusr] @ localhost []**強力なテキストQuery_time: 54.002604 Lock_time: 1.403354 Rows_sent: 1 Rows_examined: 3033**

use khabarin_portal3;
SET timestamp=1347376289;

User@Host: khabarin_suprusr[khabarin_suprusr] @ localhost []
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;
4

2 に答える 2

1

SELECT ステートメントの前にキーワード「EXPLAIN」を使用することから始めるとよいでしょう。

ほとんどの場合、不適切または未使用のインデックスがあります。

可能であれば、ステートメントで「*」を避け、本当に必要な行と列だけを選択してください。

于 2012-09-22T08:44:40.980 に答える
0

次のように、art_conts のインデックスを試してください。

cont_id desc,
cont_status,
cat_id,
sec_id
于 2012-09-22T08:46:01.827 に答える