[英]Mysql query/server optimization
最近,我將MySQL版本從5.5.8更改為5.6.23,並陷入了一些查詢性能問題。 在舊的MySQL中; 查詢是在合理的時間內執行的,但是在新的一台freebsd服務器中,mysql服務器變得無響應。 Linux命令
[linux〜]頂部
執行查詢時顯示mysql> 100%wcpu。 如果我分別執行每個子查詢,結果將在幾秒鍾內獲取。 此時,需要重新啟動mysql和apache才能繼續工作。
所以我的問題是下一個查詢的優化:
SELECT concat_ws('##', pos.name,
( SELECT COUNT(*) FROM nalogi n
WHERE n.other_createtime >= '2015-03-01 00:00:00'
AND n.other_createtime <= '2015-03-31 23:59:59'
AND n.nalog_invalid = 'N' AND n.other_pos = pos.id ),
( SELECT COUNT(*) FROM nalogi n, posiljke_nalogi pn, posiljke p
WHERE p.other_createtime >= '2015-03-01 00:00:00'
AND p.other_createtime <= '2015-03-31 23:59:59'
AND pn.nalogid = n.id
AND pn.masterId = p.id
AND p.path_from_type = 'center'
AND n.nalog_invalid = 'N'
AND (p.path_to_type = 'pos' OR p.path_to_type = 'customer')
AND n.other_pos = pos.id )) 'entry' FROM spl_pos pos ORDER BY pos.id
目前,我正在使用索引和內存中表的緩存。 歡迎任何速度優化或其他建議。
我搜索網,發現了一些很好的來源來源1 , 源2和許多其他人,我已經在現有的查詢中使用。 我還檢查了比較的字符串類型。 根據經驗,選擇以下行時會遇到一些問題:
where x.field=field (slow)
where x.field="field" (much faster)
所以我也檢查了一下,日期類型也是如此。 現在我幾乎沒有更多嘗試的想法了。 如果需要,我可以提供其他數據。
目前,我通過單獨執行查詢來節省情況(我希望在一個查詢中這樣做)。
我的建議很少:
EXPLAIN
查詢,看看創建臨時表,文件排序等? 盡量避免所有這些事情。 WHERE
子句,請確保數據類型相同,如果列為“ 123”,並且您正在比較col1 = 123,則不會使用索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.