1. 程式人生 > >MySQL的優化, 分割槽

MySQL的優化, 分割槽

一. 資料庫的優化?

1.優化索引、SQL 語句、分析慢查詢;

2.設計表的時候嚴格根據資料庫的設計正規化來設計資料庫;

3.使用快取,把經常訪問到的資料而且不需要經常變化的資料放在快取中,能節約磁碟 IO

4.優化硬體;採用 SSD,使用磁碟佇列技術(RAID0,RAID1,RDID5)等

5.採用 MySQL 內部自帶的表分割槽技術,把資料分層不同的檔案,能夠提高磁碟的讀取效率;

6.垂直分表;把一些不經常讀的資料放在一張表裡,節約磁碟 I/O;

7.主從分離讀寫;採用主從複製把資料庫的讀操作和寫入操作分離開來;

8.分庫分表分機器(資料量特別大),主要的的原理就是資料路由;

9.選擇合適的表引擎,引數上的優化

10.進行架構級別的快取,靜態化和分散式;

11.不採用全文索引;

12.採用更快的儲存方式,例如 NoSQL 儲存經常訪問的資料**。

二. Mysql 資料庫如何分割槽、分表? 

分表可以通過三種方式:Mysql 叢集、自定義規則和 merge 儲存引擎。 分割槽有四類: 感恩於心,回報於行。 面試寶典系列-Python http://www.itheima.com Copyright© 2018 黑馬程式設計師 197 RANGE 分割槽:基於屬於一個給定連續區間的列值,把多行分配給分割槽。 LIST 分割槽:類似於按 RANGE 分割槽,區別在於 LIST 分割槽是基於列值匹配一個離散值集合中的某個 值來進行選擇。 HASH 分割槽:基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的 這些行的列值進行計算。這個函式可以包含 MySQL 中有效的、產生非負整數值的任何表示式。 KEY 分割槽:類似於按 HASH 分割槽,區別在於 KEY 分割槽只支援計算一列或多列,且 MySQL 伺服器 提供其自身的雜湊函式。必須有一列或多列包含整數值。

三. 如何對查詢命令進行優化?

 a. 應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索。

b. 應儘量避免在 where 子句中對欄位進行 null 值判斷,避免使用!=或<>操作符,避免使用 or 連線條件,或在 where 子句中使用引數、對欄位進行表示式或函式操作,否則會導致權標掃描

c. 不要在 where 子句中的“=”左邊進行函式、算術運算或其他表示式運算,否則系統將可能無 法正確使用索引。

d. 使用索引欄位作為條件時,如果該索引是複合索引,那麼必須使用到該索引中的第一個欄位作為 條件時才能保證系統使用該索引,否則該索引將不會被使用。

e. 很多時候可考慮用 exists 代替 in。

f. 儘量使用數字型欄位。

g. 儘可能的使用 varchar/nvarchar 代替 char/nchar。

h. 任何地方都不要使用 select from t ,用具體的欄位列表代替“”,不要返回用不到的任何欄位。

i. 儘量使用表變數來代替臨時表。

j. 避免頻繁建立和刪除臨時表,以減少系統表資源的消耗。 感恩於心,回報於行。 面試寶典系列-Python http://www.itheima.com Copyright© 2018 黑馬程式設計師 198 k. 儘量避免使用遊標,因為遊標的效率較差。

l. 在所有的儲存過程和觸發器的開始處設定 SET NOCOUNT ON ,在結束時設定 SET NOCOUNT OFF。

m. 儘量避免大事務操作,提高系統併發能力。

n. 儘量避免向客戶端返回大資料量,若資料量過大,應該考慮相應需求是否合理