1.使用資料快取。可以將資料快取到檔案或者redis,memcache這樣的高速儲存系統中,來減少資料庫的查詢次數。
2.結構優化。
**選擇合適的資料庫引擎常見的資料庫引擎有innodb,myisam 查詢較多的場景可以使用myisam,需要事務支援的場景可以選擇innodb。
**滿足基本的三正規化。
**選擇合適的字段型別 優先順序 數字》 時間 > 字串。
** 適當的字段冗餘,來提高資料的查詢效率
3.定位慢查詢語句。
//啟動 mysql
> mysqld_safe --user=mysql --slow_query_log --slow_query_log_file=/tmp/slow-query.log --long_query_time=1
上面這條命令啟動 mysql 之後, 在執行過程中, 可以將執行時間超過 1 秒的sql 記錄到檔案下。
4.語句優化。
**不要使用select * 。
**最好不要使用null。
**在where欄位上新增索引。
**盡量不要在where字句上進行函式操作 例子 :(select id from t where substring(name,1,3) = 'abc')。
**模糊查詢中,%前置不要使用索引 例子 : 「 %前置 」。
**使用or語句要注意 左右兩側都有索引才能使用索引。
**對於分組的資料mysql會對資料自動排序,可以強制其不排序 order by null。
5.索引優化。
索引是一種單獨的,物理的對資料庫進行排序的儲存結構,可以指數級別的提高查詢的速度。我們可以對where語句後的字段新增索引,就是條件字段。如果查詢多個字段我們可以增加組合索引。
但注意索引也不能化用,過多的索引會增加資料更新的效率。
6.分庫分表。
分庫,一般按照業務的功能進行對資料表經行拆分,使資料表更加有條理性。
分表有兩種,垂直拆分和水平拆分 垂直拆分就是將一些不常用的字段單獨的放到一張表中,如果查詢的資料過多可以使用水平分表,比如按照年, 月, 日等。
==拆分表需要對**進行調整, 所以要慎重.
7.主從複製,讀寫分離。
可以建立多台資料庫伺服器, 一些資料庫專門用來寫入資料, 另外一些資料庫做同步資料, 實現讀寫分離, 降低單台資料庫壓力, 提高讀寫的效率。
8.中文分詞。
mysql 全文檢索不支援中文, 所以針對大段文字的檢索效率不高, 我們可以借助中文分詞的方式來提高檢索的效率. 常見的分詞有 scws, phpanalysis , 還有乙個基於python的分詞系統不錯, 叫結巴分詞.
資料庫的優化問題
1 根據慢日誌定位慢查詢sql 將show query log設定為on,超過long query time的sql將被記錄在慢日誌show query log file中 set global show query log on 將慢日誌開啟 set global long query time ...
mysql 資料庫優化問題
可以先看一下我的另一篇文章 mysql調優 慢查詢 explain以及索引 分頁優化 然後還有乙個博文 mysql效能優化的最佳21條經驗 兩個儲存引擎的區別 詳見我的另一篇文章 mysql的儲存引擎以及innodb和myisam的索引結構 索引的使用場景 不會頻繁變化的多個值 經常在where語句...
資料庫優化 資料庫設計優化
一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...