之前資料庫設計的做得不好的幾個點總結 mysql

2021-10-24 04:55:51 字數 1298 閱讀 9119

1.表中所有字段必須都是not null屬性,業務可以根據需要定義default值。 a

)null的列mysql內部需要更多的特殊處理,消耗更多資源;

b)對null 

的處理時候,只能採用

is null

或is not null

,而不能採用=、

in、<

、<>、!=

、not in

這些操作符號。

如:where status!=1,查詢結果不會包含status為null值的記錄,另外:負向查詢條件:、!=、not in、not like等,會導致全表掃瞄,避免使用

2.避免使用blob、text等大字段,如果必須使用,應垂直拆分到分表,擴充套件表裡,僅在需要讀這些物件的時候才去select。

3.時間型別盡量選取timestamp,datetime占用8位元組,timestamp僅占用4位元組,但是範圍為1970-01-01 00:00:01到2038-01-01 00:00:00。也可選用int來儲存時間,使用sql函式unix_timestamp()和from_unixtime()來進行轉換,但可讀性差。

4.儲存金錢的字段,建議用int,程式端乘以100和除以100進行訪問。

因為int占用4位元組,而double占用8位元組,空間浪費,且小數容易導致錢對不上.

5.水平分表盡量用取模方式,日誌、報表類資料建議採用日期進行分表。

6.資料庫本身庫、表、列所有字符集必須保持一致,為utf8或utf8mb4,否則容易索引失效。建議mysql服務端my.cnf做預設配置

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

character-set-server = utf8mb4

collation-server = utf8mb4_general_ci

7.禁止使用儲存過程、檢視、觸發器、event,禁止超過3-5張表的join。

解讀:高併發大資料的網際網路業務,架構設計思路是「解放資料庫cpu,將計算轉移到服務層」

,併發量大的情況下,這些功能很可能將資料庫拖死

,業務邏輯放到服務層具備更好的擴充套件性,能夠輕易實現「增機器就加效能」

。過多的join可能較多的nested loop,消耗較多cpu

8.用int儲存ip,節省儲存空間,sql提供有的兩個ip轉換函式:select inet_aton('192.168.148.128'); select inet_ntoa(3232236044);

資料庫設計 設計資料庫之前

1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...

資料庫設計 設計資料庫之前

1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...

資料庫設計 設計資料庫之前

1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...