如何优化mysql查询

时间:2012-09-22 08:32:56

标签: php mysql database query-optimization

我收到了来自我的网络托管公司的通知,以优化我的网站中的MySQL查询。他们告诉我,在共享主机中不允许运行超过15秒的MySql查询,而此域的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 [] ** strong text 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;

2 个答案:

答案 0 :(得分:1)

一个好的开始是在SELECT语句前面使用Keword“EXPLAIN”。

大部分时间都有不正确或未使用的索引。

如果可能,请在语句中避免使用“*”,并仅选择您真正需要的行和列。

答案 1 :(得分:0)

尝试使用art_conts的索引,如下所示:

cont_id desc,
cont_status,
cat_id,
sec_id