以下簡單筆記一下目前我所知道的 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> (<-----這是指令)
文章標籤
全站熱搜

SQL query 的調校提供一點建議 * 建立索引(如 EXPLAIN 有建議,或是該欄位經常的查詢的需求時) 建立索引是兩面刃,固然是能提升效能,但最終衡量的依據應該是該表該欄位是否頻繁的變動,若是,且該表已有很多index 建議朝其他方向著手改善 * SQL 語法的 WHERE 條件中,有建索引的欄位往前搬,效能會好一些 (意見一致) * 如果可以的話,減少一個 SQL JOIN 的 Table 數量 Join 語法是SQL查詢效率低落的原罪之一 1. 部分語句可利用子查詢的方式改善 2. Join的欄位透過建立 index 也可獲得改善 3. 重新思考並修改整Table結構 (工程浩大) 4. 找出Join的理由,考慮反正規劃來改善 * 或是將一個 SQL 拆成多個 SQL (這不曉得觀念對不對?) 這應該跟我說的子查詢相同方向 (但我不確定) 一點分享,希望幫點忙,我在solr的部分想跟您請教 您在研究 4.X 版時,Analyzer 有找到繁體中文的解決方案嗎? 過去我玩1.4是用 je-analysis-1.5.1
非常感謝這位大大提供的建議,真的讓我獲益良多。 至於 Solr 4.X 中文分詞的部份 因為後來工作在職責調整的關係 就沒有繼續研究了 不過之前我是用 mmseg4j 來做分詞 它預設的詞庫的確是簡中 不過可以自己建繁體中文的詞庫來做分詞 至於設定的細節的話可能要再 google 才記得了 還有現在公司在用的分詞器 我剛才問了一下是用 ikanalyzer 可能也可以研究一下 希望以上資訊對你有幫助 ^^