最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql 建庫建表技巧分享

 更新時間:2011年07月20日 21:08:48   作者:  
本文中說到的“建”,并非單純的建一個庫,或是建一張表,而是你建好的庫和表在項目的運營中,是否能應(yīng)付各種事件,下面我說說幾個我在項目中遇到的問題以及處理的方法,算是一個小小的心得,給大家分享下。
一、兩表之間若有關(guān)聯(lián),你是否還在用主鍵進(jìn)行關(guān)聯(lián)?
  比如現(xiàn)在有2張表,一張新聞欄目表,一張新聞表,現(xiàn)在兩張表需要進(jìn)行關(guān)聯(lián),我想大多數(shù)人的做法肯定是在新聞表里建一個新聞欄目id,然后把新聞欄目表里的主鍵ID(自增)寫到這個字段里,通過這樣進(jìn)行兩表關(guān)聯(lián)。
  如果你是這樣做的,趕緊改掉這個習(xí)慣吧。也許你會問為什么,欄目id是主鍵啊,又是自增的,為什么這樣操作不行?原因其實很簡單,欄目我們會增加,也會刪除,刪除就會造成主鍵id之間會有斷號的情況,由于主鍵設(shè)置為自增,也就是說你之前刪掉的欄目,再進(jìn)行添加,id是不會去補上哪個空缺的,而是一直遞增。這樣就會造成一種情況,如果那天對數(shù)據(jù)庫進(jìn)行優(yōu)化,把主鍵進(jìn)行了重新排序(暫時沒有找到mysql優(yōu)化軟件會優(yōu)化主鍵,但是可以通過代碼刪除主鍵,然后從新建立自增主鍵來實現(xiàn)主鍵重新排序),那就徹底杯具了,欄目和文章完全對不上號了。所以我建議兩表之間關(guān)聯(lián)不用主鍵,而是單獨建一個編號的字段,我們這里可以用mysql的uuid()函數(shù)做為編號,相關(guān)文獻(xiàn)可以參考《UUID做主鍵好還是不好》,只所以一張表要2個主鍵,一個物理主鍵(自增id),一個邏輯主鍵(UUID),原因是:對于InnoDB這種聚集主鍵類型的引擎來說,數(shù)據(jù)會按照主鍵進(jìn)行排序,由于UUID的無序性,InnoDB會產(chǎn)生巨大的IO壓力,此時不適合使用UUID做物理主鍵,可以把它作為邏輯主鍵,物理主鍵依然使用自增ID。至于性能,我本地測了下基本上沒差異,網(wǎng)上也有人做了10W條數(shù)據(jù)的測試——《實測MYSQL UUID性能》。
二、統(tǒng)一把主鍵類型設(shè)為bigint吧
  bigint是從-2^63 (-9223372036854775808)到2^63-1 (9223372036854775807)的所有整型數(shù)據(jù),存儲大小為8個字節(jié)。而int是從-2^31 (-2,147,483,648)到2^31-1 (2,147,483,647)的整型數(shù)據(jù),存儲大小為4個字節(jié)。存儲空間擴大一倍,而存儲數(shù)據(jù)卻擴大N倍,再加上主鍵是一個自增的字段,我們根本無法控制它會自增到多少數(shù)值,所以我通常在建表的時候,主鍵類型都是設(shè)為bigint的,同樣,上面提到的編號字段類型也是bigint。
三、不要把varchar長度設(shè)太“死”
  這也是我之前經(jīng)常犯得一個毛病,比如手機,我就設(shè)置為varchar(11),郵編設(shè)置成varchar(6),姓名設(shè)置成varchar(10)等等等等,看似每個字段都設(shè)置得很嚴(yán)謹(jǐn),但是在項目實際進(jìn)行中,這完全就是自找苦吃,比如手機,用戶偏偏就要在手機號前輸個0,又比如郵編,如果用戶輸入的是全角的數(shù)字呢?姓名就更不用說了,萬一是個少數(shù)民族的人,名字七八個字。所以我建議,既然定義為varchar,就代表不會涉及到計算,何不干脆定義一個通用的長度,比如varchar(50),如果真要限制長度,用程序去判斷,不要讓數(shù)據(jù)庫來限制,不然用戶輸了一長串,結(jié)果mysql就存了前幾個字符,讓人覺得這程序有問題。
  還有就是,如果你是做cms這種通用后臺,更別把字段限制得太“死”,因為你無法預(yù)料之后的每個項目的需求,所以還是把varchar設(shè)大一點,我現(xiàn)在是統(tǒng)一都設(shè)為255,如果很有可能會超過255的字段,比如URL,我就干脆設(shè)置成text,一勞永逸。
四、為常用的搜索字段建立索引吧
  不解釋,但不要盲目建立索引。
五、歡迎您的回復(fù)補充

相關(guān)文章

  • mysql中使用date_add()函數(shù)講解

    mysql中使用date_add()函數(shù)講解

    這篇文章主要介紹了mysql中使用date_add()函數(shù)講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Mysql8.0輕松實現(xiàn)主從復(fù)制

    Mysql8.0輕松實現(xiàn)主從復(fù)制

    這篇文章主要介紹了Mysql8.0輕松實現(xiàn)主從復(fù)制方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • MySQL優(yōu)化之連接優(yōu)化

    MySQL優(yōu)化之連接優(yōu)化

    MySQL連接優(yōu)化主要指客戶端連接數(shù)據(jù)庫以及數(shù)據(jù)庫為響應(yīng)客戶端的請求而打開數(shù)據(jù)表和索引的過程中涉及到的參數(shù)調(diào)整。下面我們來詳細(xì)的探討下
    2017-03-03
  • Mysql如何查看表及字段信息

    Mysql如何查看表及字段信息

    這篇文章主要介紹了Mysql如何查看表及字段信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • mysql中的sql_mode模式實例詳解

    mysql中的sql_mode模式實例詳解

    這篇文章主要介紹了mysql中的sql_mode模式,結(jié)合實例形式詳細(xì)分析了mysql sql_mode模式相關(guān)原理、用法及操作注意事項,需要的朋友可以參考下
    2020-01-01
  • Win10下mysql 8.0.15 安裝配置方法圖文教程

    Win10下mysql 8.0.15 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Win10下mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • mysql 強大的trim() 函數(shù)

    mysql 強大的trim() 函數(shù)

    這篇文章主要介紹了mysql 強大的trim() 函數(shù)使用方法,需要的朋友可以參考下
    2014-03-03
  • 在Windows環(huán)境下使用MySQL:實現(xiàn)自動定時備份

    在Windows環(huán)境下使用MySQL:實現(xiàn)自動定時備份

    下面小編就為大家分享一篇在Windows環(huán)境下使用MySQL:實現(xiàn)自動定時備份的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • MySQL如何確定VARCHAR大小問題

    MySQL如何確定VARCHAR大小問題

    本文主要介紹了MySQL如何確定VARCHAR大小問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql異常占用資源排查

    mysql異常占用資源排查

    本文詳細(xì)介紹了通過MySQL的全局變量檢查日志狀態(tài),監(jiān)控連接數(shù)及啟用和調(diào)整慢查詢記錄,以幫助排查數(shù)據(jù)庫性能問題,感興趣的可以了解一下
    2025-07-07

最新評論

阳朔县| 胶南市| 延安市| 瓮安县| 图木舒克市| 买车| 郴州市| 高碑店市| 海兴县| 二连浩特市| 青河县| 卢湾区| 扶风县| 河曲县| 邵阳县| 大竹县| 元氏县| 大城县| 长顺县| 镇康县| 同心县| 宣武区| 贵阳市| 岳阳县| 曲周县| 获嘉县| 新津县| 玛沁县| 纳雍县| 曲周县| 萨嘎县| 闽侯县| 辽宁省| 洛南县| 西峡县| 永康市| 六枝特区| 涟源市| 土默特左旗| 辛集市| 钟祥市|