我緩慢查詢緩存與memcached,它很好,但有時我們在mysql中有很多緩慢的查詢,就像memcached已停止,然後我們的網站關閉。MySQL緩慢查詢和memcached
慢查詢圖:http://i.imgur.com/ReyWe.png
在這個時刻,我們在30秒內得到約100慢查詢。它可能是什麼? 我們查詢:
# Query_time: 5.942602 Lock_time: 0.010214 Rows_sent: 10000 Rows_examined: 493139
SET timestamp=1335194149;
SELECT story_id FROM dug_stories d WHERE d.story_is_permanent=0 AND
(
(d.story_time>1335190543 AND (d.story_pluses-d.story_minuses) > 5)
OR
(((d.story_pluses-d.story_minuses) > 12 OR (d.story_pluses >= 10 AND d.story_minuses<=0)) AND d.story_cat!=48 AND d.st
ory_cat!=131 AND d.story_cat!=55 AND d.story_cat!=44 AND d.story_cat!=126 AND d.story_cat!=53 AND d.story_cat!=370 AND d.story_cat!=381 AND d.stor
y_cat!=304 AND d.story_cat!=497) OR (d.story_cat=48 AND (d.story_pluses-d.story_minuses) > 9) OR (d.story_cat=131 AND (d.story_pluses-d.story_min
uses) > 8) OR (d.story_cat=55 AND (d.story_pluses-d.story_minuses) > 8) OR (d.story_cat=44 AND (d.story_pluses-d.story_minuses) > 9) OR (d.story_c
at=126 AND (d.story_pluses-d.story_minuses) > 13) OR (d.story_cat=53 AND (d.story_pluses-d.story_minuses) > 8) OR (d.story_cat=370 AND (d.story_pl
uses-d.story_minuses) > 8) OR (d.story_cat=381 AND (d.story_pluses-d.story_minuses) > 8) OR (d.story_cat=304 AND (d.story_pluses-d.story_minuses)
> 8) OR (d.story_cat=497 AND (d.story_pluses-d.story_minuses) > 9)
)
ORDER BY d.story_rating DESC, d.story_time DESC LIMIT 0, 10000;
小幅調整查詢(而不是全部=類別,我更改爲不類別中(要排除的類別)的名單,但格式,可讀性更強! ......另外,還要注意的SET TIMESTAMP變量甚至沒有被查詢中使用的...這是一個硬編碼值。
SET timestamp=1335194149;
SELECT
story_id
FROM
dug_stories d
WHERE
d.story_is_permanent = 0
AND ( (d.story_time > 1335190543 AND d.story_pluses - d.story_minuses > 5)
OR ( ( d.story_pluses - d.story_minuses > 12
OR ( d.story_pluses >= 10 AND d.story_minuses <= 0)
)
AND NOT d.story_cat IN (44, 48, 53, 55, 126, 131, 304, 370, 381, 497)
)
OR (d.story_cat = 44 AND d.story_pluses - d.story_minuses > 9)
OR (d.story_cat = 48 AND d.story_pluses - d.story_minuses > 9)
OR (d.story_cat = 53 AND d.story_pluses - d.story_minuses > 8)
OR (d.story_cat = 55 AND d.story_pluses - d.story_minuses > 8)
OR (d.story_cat = 126 AND d.story_pluses - d.story_minuses > 13)
OR (d.story_cat = 131 AND d.story_pluses - d.story_minuses > 8)
OR (d.story_cat = 304 AND d.story_pluses - d.story_minuses > 8)
OR (d.story_cat = 370 AND d.story_pluses - d.story_minuses > 8)
OR (d.story_cat = 381 AND d.story_pluses - d.story_minuses > 8)
OR (d.story_cat = 497 AND d.story_pluses - d.story_minuses > 9)
)
ORDER BY
d.story_rating DESC,
d.story_time DESC
LIMIT
0, 10000;
非常感謝您的幫助! 對不起,我的英文不好:)
非常感謝!我會試試:) – dalopikz 2012-04-24 14:29:21