從零開始設(shè)計(jì)和搭建你的體育賽事比分網(wǎng)站 (4) - 建表優(yōu)化
時(shí)間:2023-05-29 21:21:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-05-29 21:21:01 來源:網(wǎng)站運(yùn)營
從零開始設(shè)計(jì)和搭建你的體育賽事比分網(wǎng)站 (4) - 建表優(yōu)化:上一篇:從零開始設(shè)計(jì)和搭建你的體育賽事比分網(wǎng)站 (3) - 原型與架構(gòu)設(shè)計(jì)
上一個(gè)模塊中,我們分別從快速原型設(shè)計(jì)、對(duì)初級(jí)架構(gòu)設(shè)計(jì)進(jìn)行優(yōu)化這兩方面進(jìn)行了體育賽事比分網(wǎng)站的原型與架構(gòu)設(shè)計(jì)。在本模塊中,我們將從網(wǎng)站建表優(yōu)化這一方面進(jìn)行如下三個(gè)模塊的介紹。
4 建表優(yōu)化4.1 建表誤區(qū)在一些項(xiàng)目中,常會(huì)有人對(duì)數(shù)據(jù)庫中的表建的很隨意,不考慮使用場景與網(wǎng)站在實(shí)際操作中的各種情況。假設(shè)我們體育賽事比分網(wǎng)站中的用戶表 db_user,現(xiàn)在這個(gè)表要存放:
- 用戶 ID;
- 用戶名稱(收件人);
- 加密后的登錄密碼;
- 郵箱;
- 手機(jī);
- 地址;
- 上次修改密碼時(shí)間;
我們舉一個(gè)常見的反例:
大部分人都經(jīng)歷過這個(gè)階段,更有甚者,除了 ID 其他一律 varchar(255)。雖然利用上邊的表我們也可以正確的存儲(chǔ)數(shù)據(jù),但是小伙子,你這樣是要被開除的!因?yàn)檫@從性能上來說就差很多了。
4.2 建表原則怎樣建表才是正確的呢?我們先來介紹一個(gè)開發(fā)中的建表原則:
- 開發(fā)中往往把頻繁用到的數(shù)據(jù),存放到一張表,優(yōu)先考慮效率;
- 不是常用的數(shù)據(jù),存放到輔助表,更多地考慮節(jié)約空間;
- 對(duì)于常用的需要關(guān)聯(lián)的數(shù)據(jù),在需要的時(shí)候也會(huì)做冗余設(shè)計(jì),提高檢索速度,犧牲空間減少時(shí)間。
那么有一個(gè)問題,什么樣的數(shù)據(jù)查詢效率高呢?
- 計(jì)算機(jī)底層是二進(jìn)制傳輸?shù)?,所以越貼近底層的數(shù)據(jù)類型效率越高,比如 int 類型的性能就遠(yuǎn)遠(yuǎn)比 varchar 類型的高,檢索起來快;
- 定長的數(shù)據(jù)類型的檢索要比變長的數(shù)據(jù)類型的要快,但相對(duì)來說也會(huì)犧牲一定的空間進(jìn)行存儲(chǔ)。
4.3 舉例分析- 首先來分析一下那些數(shù)據(jù)使用頻率比較高。我們可以打開 飛鯨體育數(shù)據(jù) 的控制臺(tái):
可以發(fā)現(xiàn)在個(gè)人中心-賬號(hào)設(shè)置中,用戶的數(shù)據(jù)不是全部查詢出來的,比如像地址這樣的數(shù)據(jù)就沒有顯示在賬號(hào)設(shè)置中,所以我們可以優(yōu)先考慮手機(jī)、郵箱、登錄密碼、上次修改密碼時(shí)間這一部分?jǐn)?shù)據(jù)的效率。
- 手機(jī):手機(jī)不能使用數(shù)字類型,所以可以設(shè)置為定長的字符串 char(11) ,郵箱、密碼同理;
- 上次修改密碼時(shí)間在實(shí)際業(yè)務(wù)中可能會(huì)做一些計(jì)算(比如提示多少天沒有修改密碼),所以我們可以使用定長的時(shí)間戳 timestamp(4) 會(huì)更方便一些;
- 假設(shè)我們還有一些枚舉類型的字段,比如性別等等,可以考慮采用 tinyint(1) 會(huì)節(jié)省空間。
而最終我們的表將會(huì)變成
在本模塊中,我們分別從建表誤區(qū)、建表原則、舉例分析三個(gè)部分介紹了如何進(jìn)行網(wǎng)站建表優(yōu)化。在下一個(gè)模塊中,我們將會(huì)從技術(shù)棧的角度出發(fā),介紹網(wǎng)站的前后端開發(fā),敬請(qǐng)期待!
飛鯨體育數(shù)據(jù) —— 球探網(wǎng)12年匠心打造,實(shí)時(shí)、海量、可靠的體育數(shù)據(jù)服務(wù)
更多技術(shù)干貨敬請(qǐng)關(guān)注:
飛鯨體育數(shù)據(jù)-本站