SQL表設計


 

1.一些情況下顯示主鍵索引便於查找,提高查詢效率

2.自增;UUID可能出現頁分裂,產生表碎片,性能不好(插入時間長、占用空間大)

3.有業務含義可能涉及內容的修改,數據在磁盤的儲存位置可能發生變更;且有業務含義的情況下主鍵不是順序自增的,可能存在新插入的數據沒有先前插入的數據大的情況,這兩種情況可能導致頁分裂、產生空間碎片

4.一般用tinyint型,enum order by操作效率低,需要額外操作,且當存儲數字時不利於操作(如:0 ,‘0’)

5.精確到分可以用int,以元為基本單位用decimal(不用以二進制儲存的float和double,存在誤差)

6.varchar 直觀,但插入數據沒有校驗(存在歧義2019111),時間比較運算復雜;timestamp 4字節 支持跨時區,但范圍有限 1970~2038;datetime 8字節 范圍大,但不支持跨時區;bigint 8字節 表示范圍大,但需要自己維護,不方便

7.效率低;一般用HDFS(Hadoop File System)儲存;mysql提供兩種存儲大文件的類型text和blob但不常用,因為內存臨時表不支持,查詢時只能使用磁盤臨時表,查詢效率低,以及數據內容大,binlog內容多導致主從同步效率低

8.索引性能不好,增加數據庫使用開銷;查詢時可能出現不可預料的結果,而浪費時間排查bug

 

PS:自增主鍵用完(通常不會出現這種情況就已經分庫分表),mysql5.6以后的版本可以通過改從庫表結構(如BigInt)再主從切換解決(可能出現數據丟失的情況)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM