關於設計表時應該注意的問題

2021-08-24 18:42:59 字數 1412 閱讀 9503

i. 其他舊的以及新開發的引擎具體介紹:

4. 關於屬性資料型別的選擇。

a. int(乙個位元組的tinyint,兩個位元組的smallint,三個位元組的mediumint,四個位元組的int,8個位元組的bigint。記住:unsigned不管你定義或者不定義,都不影響內部的儲存位元組大小)

b. 少於10個字元用char是在合適不過了。(不過要記住在memory引擎裡面會自動把varchar轉化為char)

c. 我一般用decimal或者numeric來代替float 或者double。因為老闆要求精確的數字。如果不要求精確的,那就用float吧。速度快,佔空間小。(decima、float(p)是動態儲存。比如:decimal(10,2)占用5個位元組。float佔4個位元組,)

d. blob,text,varchar(一般存放文章內容,特別是新聞**。需要的位元組數是所儲存的字元長度+1。記住blob和varchar是text和char的binary型別)

e. enum(在一定範圍內絕佳的代替varchar和char的工具,因為她只佔一到兩個位元組。)

f. 時間和日期型別(佔3個位元組的date,8個位元組的datetime,4個位元組的timestamp,3個位元組的time,1個位元組的year。)。如果要儲存比如『1983』這樣的年份,用year明顯比varchar或者char要節省空間。因為後者要佔5個位元組。

g. boolean(用來儲存yes或者no之類的值,占用乙個位元組。)

h. 關於自增字段。目前我們的專案中涉及到好多order by rand()操作。此類語句在資料庫併發大的時候會造成cpu嚴重阻塞,持續產生資料庫死鎖!解決此類問題最好的辦法就是利用自增字段,用程式隨即生成數字序列,或者在資料庫端隨即生成數字序列。

i. 關於zerofill。非常好用的前置填補0的儲存,而不是用用對應個數的空串來代替。在需要前置補零的操作中int zerofill可以用來代替char或者varchr。

5. 關於預設值。

a. 在5.0之後,只要設定欄位為not null,系統自動給出預設值。對應char->』』,int->0,boolean->0等等。

b. 在5.0之前的版本,需要手動指定預設值,否則會出現一定的異常。到時候查都不好查了。

6. 關於多資料庫建立。

a. 應該把對應的業務放在各自不同的資料庫裡,而不是所有業務放到乙個庫裡面。

b. 資料庫的命名和表命名一樣。

7. 關於索引。

a. 設計表初期盡量考慮到應該建立的索引。所有建立的索引一定要測試一下,看是否有必要,否則會翻倍的減少寫資料的效能。

b. 對於只有儲存0或者1的列,盡量乾掉索引,單獨分出兩個表。乙個代替0,另外乙個代替1。或者在乙個字段裡面用emum或者char(0)或者char(1)來代替。

ps: 最後乙個要值得注意的,就是盡量所有的字段用not null。雖然mysql可以對null列進行索引,不過我不建議。

用 static 修飾變數時應該注意的問題

1.使用static修飾的變數由該類的全體物件共享 1 public class teststatic 78 public void printa 1112 public static void main string args 20 輸出結果 10 10t1中我們把靜態變數a的值設為了10,在t2...

在MySQL中使用萬用字元時應該注意的問題

現象 有乙個表 action conf,資料如下 如果想獲取以exp site 10 開頭的en name的記錄,sql語句該如何寫?so easy!select en name from action conf where en name like exp site 10 很自信的在idb中執行了...

表的設計具體注意的問題

1 資料行的長度不要超過 8020 位元組,如果超過這個長度的話在物理頁中這條資料會占用兩行從而造成儲存碎片,降低查詢效率。2 能夠用數字型別的字段盡量選擇數字型別而不用字串型別的 號碼 這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連線回逐個比較字串中每乙個字元,而對於數字型...