MySQL優化之概述及欄位設計(一)

2021-10-01 02:24:36 字數 1558 閱讀 1539

在日常開發中,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 隔離性 乙個事務中的操作語句所做的修改必...