以下簡單筆記一下目前我所知道的 SQL 效能調整方法:

1. 找出慢在哪裡?
MySQL: 有 slow query 的 log ,可以執行時間超過幾秒的 SQL 語法要記入 LOG
Oracle: 也有這樣的功能

2. 使用資料庫內建的效能分析工具
MySQL: 內建的為 EXPLAIN 指令,直接將 EXPLAIN 加在要分析的 SQL 語法前面並執行,就會顯示該 SQL 的效能調整建議
Oracle: 內建的似乎叫 EXPLAIN PLAN ,不過我之前是用 PL/SQL,寫完 SQL 直接按快捷鍵就自動分析了

3. 依據建議做調整,然後再進度進行分析,直到效能達到需求或標準為止
這裡可以做的,我目前我所知的為
* 建立索引(如 EXPLAIN 有建議,或是該欄位經常的查詢的需求時)
* SQL 語法的 WHERE 條件中,有建索引的欄位往前搬,效能會好一些
* 如果 EXPLAIN 一直顯示 "Using file sort" 之類的訊息,代表查詢的資料太大,需要使用到外部排序(硬碟排序),可以考慮把記憶體加大
   或是看能不能少撈一點資料,讓資料大小可以在記憶體內排序完畢
* 如果可以的話,減少一個 SQL JOIN 的 Table 數量
* 或是將一個 SQL 拆成多個 SQL (這不曉得觀念對不對?)

4. 定期去做 OPTIMIZE
單一表格: OPTIMIZE TABLE <table_name>;  (這是 SQL)
所有表格: mysqlcheck -o <db_schema_name>   (<-----這是指令)




 

 

arrow
arrow
    全站熱搜

    wbkuo 發表在 痞客邦 留言(2) 人氣()