在日常開發中,mysql的優化是必不可少的,下面就來簡單的介紹一下為什麼要優化,怎麼去優化
為什麼要優化:
當我們的應用吞吐量到達了資料庫的處理速度之上
資料庫隨著應用逐漸增多,處理壓力逐漸增大
存放在磁碟上的資料庫,相比於記憶體中的資料 讀寫要慢
如何優化:
表,字段設計,結合業務考量更優的儲存和計算
資料庫本身提供的優化功能,比如索引等
主動複製,讀寫分離,分區分表,負載均衡等
sql語句的優化,區分sql中的關鍵用法,比如join,left join,right join等
一、精度要求
1、decimal
decimal資料型別用於在資料庫中儲存精確的數值。我們經常將decimal資料型別用於保留準確精確度的列,例如會計系統中的貨幣資料。
建立方式為:column_name decimal(p,d);
p 有效數字的精度 範圍1-65
d 小數點後面的位數 0-30
與int資料型別一樣,decimal型別也具有unsigned和zerofill屬性。 如果使用unsigned屬性,則decimal unsigned的列將不接受負值。
2、小數轉整數
floor(x)函式
該函式的作用是將小數的小數部分去除,只留下整數部分,並且不進行四捨五入。
例:select floor(5.5) 輸出為5
round(x,d)函式和trancate(x,d)函式
兩個函式都可以用來對小數保留指定小數字數,其中第二個引數d用來指定要保留到第幾位。差別是前者會進行四捨五入,而後者不會。
例:select round(5.5,1) select trancate(5.5,1) 前者輸出 5.5 後者輸出 5.6
二、盡量使用整數表示字串
ip 儲存
當前很多應用都適用字串char(15)來儲存ip位址(占用16個位元組),利用inet_aton()和inet_ntoa()函式,來儲存ip位址效率很高,適用unsigned int 就可以滿足需求,不需要使用bigint,只需要4個位元組,節省儲存空間,同時效率也高很多。
三、盡可能使用 not null
空值不佔空間,null 占用空間
字段屬性為not null 時,插入null 會報錯,插入 『』 則不會
null 其實並不是空值,而是要占用空間,所以mysql在進行比較的時候,null 會參與字段比較,所以對效率有一部分影響。
而且b樹索引時不會儲存null值的,所以如果索引的字段可以為null,索引的效率會下降很多。
四、定長和非定長的選擇
1、較長的數字可以選擇decimal
2、char 為定長,超出長度會被擷取,varchar 為非定長,varchar 對長度的儲存占用資料空間
五、資料庫三正規化
第一正規化:欄位的原子性(關係性資料庫有列的概念)
第二正規化:消除對主鍵的部分依賴,使用乙個與業務無關的字段作為主鍵
第三正規化:消除對主鍵的傳遞依賴
MySQL概述及入門 二
邏輯架構圖 執行流程圖 查詢資料庫支援的儲存引擎 執行 show engines 多儲存引擎是mysql有別於其他資料庫的一大特性,儲存引擎是針對表的,mysql 5.5之後,預設的儲存引擎由myisam變為innodb。innodb 引擎 支援auto increment 自增列 支援外來鍵 fo...
mysql優化 1。之概述
設計 儲存引擎,字段型別,正規化。功能 索引,快取,分割槽。架構 主從複製,讀寫分離,負載均衡。合理的sql 測試和經驗。表引擎 某一種資料的儲存格式。一般叫某一種檔案系統。一般用到四種引擎innodb,myisam archive memory innodb 事務 多條sql語句全部執行完畢。才算...
MYsql事務概述及控制語句
一 事務概述 1 原子性 事務中所有的操作視為乙個原子單元,即對於事務所進行的資料修改等操作只能是完全提交或者完全回滾。2 一致性 事務在完成時,必須使所有的資料從一種一致性狀態變更為另外一種一致性狀態,所有的變更必須應用於事務的修改,以確保資料的完整性。3 隔離性 乙個事務中的操作語句所做的修改必...