一、數據庫的優化
1.優化索引、SQL 語句、分析慢查詢;
2.設計表的時候嚴格根據數據庫的設計范式來設計數據庫;
3.使用緩存,把經常訪問到的數據而且不需要經常變化的數據放在緩存中,能節約磁盤IO;
4.優化硬件;采用SSD,使用磁盤隊列技術(RAID0,RAID1,RDID5)等;
5.采用MySQL 內部自帶的表分區技術,把數據分層不同的文件,能夠提高磁盤的讀取效率;
6.垂直分表;把一些不經常讀的數據放在一張表里,節約磁盤I/O;
7.主從分離讀寫;采用主從復制把數據庫的讀操作和寫入操作分離開來;
8.分庫分表分機器(數據量特別大),主要的的原理就是數據路由;
9.選擇合適的表引擎,參數上的優化;
10.進行架構級別的緩存,靜態化和分布式;
11.不采用全文索引;
12.采用更快的存儲方式,例如NoSQL存儲經常訪問的數據**。
二、查詢效率的優化
1、存儲引擎的選擇,如果數據庫中表需要事務處理,應該考慮使用InnoDB,因為它完全符合ACID特性。如果不需要事務處理,使用默認存儲引擎MyISAM是比較明智的;
2、分表分庫,主從;
3、對查詢進行優化,要盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引;
4、應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描;
5、應盡量避免在 where子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃描;
6、應盡量避免在 where 子句中使用 or 來連接條件,如果一個字段有索引,一個字段沒有索引,將導致引擎放棄使用索引而進行全表掃描;
7、Update 語句,如果只更改1、2個字段,不要Update全部字段,否則頻繁調用會引起明顯的性能消耗,同時帶來大量日志;
8、對於多張大數據量(這里幾百條就算大了)的表JOIN,要先分頁再JOIN,否則邏輯讀會很高,性能很差。