2011年10月6日 星期四

[轉載]MySQL的查詢時間(log-slow-queries)

http://homeserver.com.tw/mysql/mysql%E7%9A%84%E6%9F%A5%E8%A9%A2%E6%99%82%E9%96%93log-slow-queries/




作者: 丫忠
• 星期四, 四月 01st, 2010
MySQL資料庫的query查詢時間往往取決於【是否建立索引】、【資料量多寡】、【query查詢的方法】…等,然而【是否建立索引】的因素卻是影響query查詢時間最重要的因素之一。
舉個例子:如果你的Table(User)中有一個name的欄位,當你要查詢姓氏為’林’的使用者,通常你會這樣下SQL語法
SELECT * FROM User WHERE name like ‘%林%’;
如此,一般而言你會將name這個欄位加入index索引中,否則當資料量大時,query時間的快慢就會明顯出現差異了。
當完成了一個網站後,程式中針對MySQL查詢(query)的次數那麼多,那要如何找出query查詢時間較長的語法呢?其實在my.cnf設定檔中(一般在/etc/my.cnf),已經提供了參數可以直接產生log記錄檔案,讓管理者可以很清楚了解到那些查詢(query)的語法花費較多的時間。
請在my.cnf設定檔中,找到[mysqld]標籤,在此標籤下面加上:
log-slow-queries = /path/slow-query.log #slow query記錄檔的路儲存路徑
long_query_time = 2 #query超過2秒時,則會記錄
log-queries-not-using-indexes #沒有索引的記錄,則會記錄
設定完成my.cnf後,請記得要重新啟動MySQL
其中,log-slow-queries記錄檔的儲存路徑,這個目錄一定要是mysql使用者可以寫入權限的位置,因為slow-query.log記錄檔是由mysql使用者去執行寫入;否則,會造成記錄檔案無法產生的情況,這個問題是最常發生,請切記!

沒有留言:

張貼留言