1. 程式人生 > >mysql創建表的註意事項

mysql創建表的註意事項

ada ipv 信息 浮點數 sql 效率 統一 2個 針對

1 庫名,表名,字段名必須使用小寫字母,"_"分割。 2 庫名,表名,字段名必須不超過12個字符。 3 庫名,表名,字段名見名識意,建議使用名詞而不是動詞。 4 建議使用InnoDB存儲引擎。( InnoDB:支持事務安全的引擎,支持外鍵、行鎖、事務是他的最大特點。如果有大量的update和insert,建議使用InnoDB,特別是針對多個並發和QPS較高的情況。) 5 存儲精確浮點數必需使用DECIMAL替代FLOAT和DOUBLE。( float,double容易產生誤差,對精確度要求比較高時,建議使用decimal來存,decimal在mysql內存是以字符串存儲的,用於定義貨幣要求精確度高的數據。在數據遷移中) 6 建議使用UNSIGNED存儲非負數值。(無負數則用unsigned可以提高範圍) 7 建議使用INT UNSIGNED存儲IPV4。( UNSINGED INT存儲IP地址占用4字節,CHAR(15)則占用15字節。計算機處理整數類型比字符串類型快。) 8 整形定義中不添加長度,比如使用INT,而不是INT(4)。( int類型作為計算機最自然的類型,速度相比其他同類類型運算速度更快。不規定大小就是為了適應各類不同機器還有同樣的效果) 9 使用短數據類型,比如取值範圍為0-80時,使用TINYINT UNSIGNED。( 更小的數據類型通常更快,因為它們占用更少的磁盤、內存和CPU緩存,並且處理時需要的CPU周期也更少) 10 不建議使用ENUM類型,使用TINYINT來代替。(php是弱類型語言) 11 盡可能不使用TEXT,BLOB類型。( (1)索引排序問題,只能使用max_sort_length的長度或者手工指定ORDER BY SUBSTRING(column,length)的長度來排序

(2) Memory引擘不支持text,blog類型,會在磁盤上生成臨時表

(3) 可能浪費更多的空間

(4) 可能無法使用adaptive hash index

(5)導致使用where沒有索引的語句變慢 ) 12 VARCHAR(N),N表示的是字符數不是字節數,比如VARCHAR(255),可以最大存儲255個漢字,需要根據實際的寬度來選擇N。 13 VARCHAR(N),N盡可能小,因為MYSQL一個表中所有的VARCHAR字段最大長度是65535個字段,進行排序和創建臨時表一類的內存操作時,會使用N的長度申請內存。 14 表字符集選擇UTF8。( (1) 使用utf8字符集,如果是漢字,占3個字節,但ASCII碼字符還是1個字節。 (2) 統一,不會有轉換產生亂碼風險 (3) 其他地區的用戶(美國、印度、臺灣)無需安裝簡體中文支持,就能正常看您的文字,並且不會出現亂碼 d)ISO-8859-1編碼(latin1)使用了單字節內的所有空間,在支持ISO-8859-1的系統中傳輸和存儲其他任何編碼的字節流都不會被拋棄。即把其他任何編碼的字節流當作ISO-8859-1編碼看待都沒有問題,保存的是原封不動的字節流。 ) 15 使用VARBINARY存儲變長字符串。 16 存儲年使用YEAR類型。 17 存儲日期使用DATE類型。(mysql會自動截取日期信息) 18 存儲時間(精確到秒)建議使用TIMESTAMP類型,因為TIMESTAMP使用4字節,DATETIME使用8個字節。 19 建議字段定義為NOT NULL。(not null的效率比null高) 20 將過大字段拆分到其他表中。(執行效率更快) 21 禁止在數據庫中使用VARBINARY,BLOB存儲圖片,文件等。( 采用分布式系統更高效) 22 表結構變更需要通知DBA審核。

mysql創建表的註意事項