數(shù)據(jù)庫字段設(shè)計(jì)規(guī)范
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
1、優(yōu)先選擇符合存儲(chǔ)需要的最小的數(shù)據(jù)類型原因 列的字段越大,建立索引時(shí)所需要的空間也就越大,這樣一頁中所能存儲(chǔ)的索引節(jié)點(diǎn)的數(shù)量也就越少也越少,在遍歷時(shí)所需要的IO次數(shù)也就越多, 索引的性能也就越差。 方法 1)將字符串轉(zhuǎn)換成數(shù)字類型存儲(chǔ),如:將IP地址轉(zhuǎn)換成整形數(shù)據(jù)。 mysql提供了兩個(gè)方法來處理ip地址: inet_aton 把ip轉(zhuǎn)為無符號(hào)整型(4-8位) inet_ntoa 把整型的ip轉(zhuǎn)為地址 插入數(shù)據(jù)前,先用inet_aton把ip地址轉(zhuǎn)為整型,可以節(jié)省空間。顯示數(shù)據(jù)時(shí),使用inet_ntoa把整型的ip地址轉(zhuǎn)為地址顯示即可。 2)對(duì)于非負(fù)型的數(shù)據(jù)(如自增ID、整型IP)來說,要優(yōu)先使用無符號(hào)整型來存儲(chǔ) 因?yàn)椋簾o符號(hào)相對(duì)于有符號(hào)可以多出一倍的存儲(chǔ)空間 SIGNED INT -2147483648~2147483647 UNSIGNED INT 0~4294967295 VARCHAR(N)中的N代表的是字符數(shù),而不是字節(jié)數(shù) 使用UTF8存儲(chǔ)255個(gè)漢字 Varchar(255)=765個(gè)字節(jié)。過大的長(zhǎng)度會(huì)消耗更多的內(nèi)存 2、避免使用TEXT、BLOB數(shù)據(jù)類型,最常見的TEXT類型可以存儲(chǔ)64k的數(shù)據(jù)建議把BLOB或是TEXT列分離到單獨(dú)的擴(kuò)展表中。 Mysql內(nèi)存臨時(shí)表不支持TEXT、BLOB這樣的大數(shù)據(jù)類型,如果查詢中包含這樣的數(shù)據(jù),在排序等操作時(shí),就不能使用內(nèi)存臨時(shí)表,必須使用磁盤臨時(shí)表進(jìn)行。 而且對(duì)于這種數(shù)據(jù),Mysql還是要進(jìn)行二次查詢,會(huì)使sql性能變得很差,但是不是說一定不能使用這樣的數(shù)據(jù)類型。 如果一定要使用,建議把BLOB或是TEXT列分離到單獨(dú)的擴(kuò)展表中,查詢時(shí)一定不要使用select * 而只需要取出必要的列,不需要TEXT列的數(shù)據(jù)時(shí)不要對(duì)該列進(jìn)行查詢。 TEXT或BLOB類型只能使用前綴索引 因?yàn)镸ySQL對(duì)索引字段長(zhǎng)度是有限制的,所以TEXT類型只能使用前綴索引,并且TEXT列上是不能有默認(rèn)值的。 3、避免使用ENUM類型修改ENUM值需要使用ALTER語句。 ENUM類型的ORDER BY操作效率低,需要額外操作。 禁止使用數(shù)值作為ENUM的枚舉值。 4、盡可能把所有列定義為NOT NULL原因: 索引NULL列需要額外的空間來保存,所以要占用更多的空間; 進(jìn)行比較和計(jì)算時(shí)要對(duì)NULL值做特別的處理。 5、使用TIMESTAMP(4個(gè)字節(jié))或DATETIME類型(8個(gè)字節(jié))存儲(chǔ)時(shí)間TIMESTAMP 存儲(chǔ)的時(shí)間范圍 1970-01-01 00:00:01 ~ 2038-01-19-03:14:07。 TIMESTAMP 占用4字節(jié)和INT相同,但比INT可讀性高。 超出TIMESTAMP取值范圍的使用DATETIME類型存儲(chǔ)。 經(jīng)常會(huì)有人用字符串存儲(chǔ)日期型的數(shù)據(jù)(不正確的做法): 缺點(diǎn)1:無法用日期函數(shù)進(jìn)行計(jì)算和比較。 缺點(diǎn)2:用字符串存儲(chǔ)日期要占用更多的空間。 6、同財(cái)務(wù)相關(guān)的金額類數(shù)據(jù)必須使用decimal類型非精準(zhǔn)浮點(diǎn):float,double 精準(zhǔn)浮點(diǎn):decimal Decimal類型為精準(zhǔn)浮點(diǎn)數(shù),在計(jì)算時(shí)不會(huì)丟失精度。占用空間由定義的寬度決定,每4個(gè)字節(jié)可以存儲(chǔ)9位數(shù)字,并且小數(shù)點(diǎn)要占用一個(gè)字節(jié)??捎糜诖鎯?chǔ)比bigint更大的整型數(shù)據(jù)。 該文章在 2024/9/14 10:16:31 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |