mysql 數(shù)據(jù)庫(kù)設(shè)計(jì)
更新時(shí)間:2009年06月14日 14:42:14 作者:
大家都知道m(xù)ysql的myisam表適合讀操作大,寫(xiě)操作少;表級(jí)鎖表
innodb表正好相反;行級(jí)鎖表
互聯(lián)網(wǎng)服務(wù),不算支付性的服務(wù)外,互動(dòng)產(chǎn)品,新聞系統(tǒng)等等一般都是讀多,寫(xiě)少。用myisam表比較合適。
表的設(shè)計(jì)
定長(zhǎng)表:所有列的字段長(zhǎng)度都是定長(zhǎng)的。可以去查mysql的手冊(cè)不定長(zhǎng)字段是VARCHAR、BLOB或TEXT。int char都是定長(zhǎng)的,定長(zhǎng)表占用空間會(huì)大。
動(dòng)態(tài)表:就是字段不是都定長(zhǎng)的。
定長(zhǎng)表要比動(dòng)態(tài)表檢索速度快。
軟件系統(tǒng)的設(shè)計(jì)習(xí)慣是把每張表都分清很明確的功能,比如用戶表都是用戶信息,如果需要同時(shí)從留言表取數(shù)據(jù),又從用戶表取用戶信息的時(shí)候,就會(huì)采用聯(lián)合查 詢,有的時(shí)候一些操作還會(huì)用left,join等各種復(fù)雜sql語(yǔ)句,沒(méi)準(zhǔn)還要用mysql的函數(shù)。如果是針對(duì)訪問(wèn)量,讀取量很大的互聯(lián)網(wǎng)服務(wù)時(shí),同時(shí)并 發(fā)去讀,數(shù)據(jù)量又大,很可怕。最好是如果數(shù)據(jù)不會(huì)修改,在常用的表上有冗余字段,能夠做到一次讀,把數(shù)據(jù)都拿到;可以有冗余的寫(xiě)操作,但減少?gòu)?fù)雜的查詢操 作。
在設(shè)計(jì)表的時(shí)候要將這個(gè)表的所有字段類型占用的字節(jié)數(shù)求和,并乘以你的預(yù)期(如:存儲(chǔ)100W數(shù)據(jù)量),就是整張表未來(lái)會(huì)占用容量。
拆表 拆庫(kù)
拆表就是將一張表復(fù)制N多張,里面分別存放不用內(nèi)容的數(shù)據(jù),數(shù)據(jù)的存放是用HASH算法來(lái)決定放入哪張表。
例如用戶表user,傳統(tǒng)情況就是一張表,拆表就是將表復(fù)制為user_01,user_02等里面都存放了格式一樣的不同用戶數(shù)據(jù)。
拆庫(kù)和拆表類似,就是庫(kù)的復(fù)制。
拆表或拆庫(kù)有很多的HASH算法,主要目的就是減少表的數(shù)據(jù)量,用算法保證每個(gè)表的數(shù)據(jù)量平均,請(qǐng)求,讀寫(xiě)操作被分?jǐn)偨档蛪毫?,而且安全,出了?wèn)題最多是一部分用戶受影響。缺點(diǎn)就是檢索不方便,需要另想辦法。
很多網(wǎng)站為了前期省事都會(huì)采用discuz的產(chǎn)品,如bbs,blog等,網(wǎng)上有不少關(guān)于這個(gè)產(chǎn)品的介紹和優(yōu)化方法,沒(méi)細(xì)研究過(guò),聽(tīng)過(guò)一些網(wǎng)站介紹他們的 優(yōu)化方法時(shí),對(duì)于數(shù)據(jù)庫(kù)主要是采用主從的方法,將數(shù)據(jù)庫(kù)的讀寫(xiě)分離來(lái)提高性能,但是個(gè)人覺(jué)得這種辦法在數(shù)據(jù)量到了規(guī)模的時(shí)候就OVER了,并發(fā)和讀寫(xiě)操作 沒(méi)提升,數(shù)據(jù)也是會(huì)逐漸累計(jì)超過(guò)限制。
互聯(lián)網(wǎng)服務(wù)由于要應(yīng)對(duì)大數(shù)據(jù)量,大請(qǐng)求量,所以在設(shè)計(jì)開(kāi)發(fā)的時(shí)候就不要太學(xué)院派,不要力圖達(dá)到數(shù)據(jù)庫(kù)、程序的設(shè)計(jì)“優(yōu)美”,性能是最要緊的。
互聯(lián)網(wǎng)服務(wù),不算支付性的服務(wù)外,互動(dòng)產(chǎn)品,新聞系統(tǒng)等等一般都是讀多,寫(xiě)少。用myisam表比較合適。
表的設(shè)計(jì)
定長(zhǎng)表:所有列的字段長(zhǎng)度都是定長(zhǎng)的。可以去查mysql的手冊(cè)不定長(zhǎng)字段是VARCHAR、BLOB或TEXT。int char都是定長(zhǎng)的,定長(zhǎng)表占用空間會(huì)大。
動(dòng)態(tài)表:就是字段不是都定長(zhǎng)的。
定長(zhǎng)表要比動(dòng)態(tài)表檢索速度快。
軟件系統(tǒng)的設(shè)計(jì)習(xí)慣是把每張表都分清很明確的功能,比如用戶表都是用戶信息,如果需要同時(shí)從留言表取數(shù)據(jù),又從用戶表取用戶信息的時(shí)候,就會(huì)采用聯(lián)合查 詢,有的時(shí)候一些操作還會(huì)用left,join等各種復(fù)雜sql語(yǔ)句,沒(méi)準(zhǔn)還要用mysql的函數(shù)。如果是針對(duì)訪問(wèn)量,讀取量很大的互聯(lián)網(wǎng)服務(wù)時(shí),同時(shí)并 發(fā)去讀,數(shù)據(jù)量又大,很可怕。最好是如果數(shù)據(jù)不會(huì)修改,在常用的表上有冗余字段,能夠做到一次讀,把數(shù)據(jù)都拿到;可以有冗余的寫(xiě)操作,但減少?gòu)?fù)雜的查詢操 作。
在設(shè)計(jì)表的時(shí)候要將這個(gè)表的所有字段類型占用的字節(jié)數(shù)求和,并乘以你的預(yù)期(如:存儲(chǔ)100W數(shù)據(jù)量),就是整張表未來(lái)會(huì)占用容量。
拆表 拆庫(kù)
拆表就是將一張表復(fù)制N多張,里面分別存放不用內(nèi)容的數(shù)據(jù),數(shù)據(jù)的存放是用HASH算法來(lái)決定放入哪張表。
例如用戶表user,傳統(tǒng)情況就是一張表,拆表就是將表復(fù)制為user_01,user_02等里面都存放了格式一樣的不同用戶數(shù)據(jù)。
拆庫(kù)和拆表類似,就是庫(kù)的復(fù)制。
拆表或拆庫(kù)有很多的HASH算法,主要目的就是減少表的數(shù)據(jù)量,用算法保證每個(gè)表的數(shù)據(jù)量平均,請(qǐng)求,讀寫(xiě)操作被分?jǐn)偨档蛪毫?,而且安全,出了?wèn)題最多是一部分用戶受影響。缺點(diǎn)就是檢索不方便,需要另想辦法。
很多網(wǎng)站為了前期省事都會(huì)采用discuz的產(chǎn)品,如bbs,blog等,網(wǎng)上有不少關(guān)于這個(gè)產(chǎn)品的介紹和優(yōu)化方法,沒(méi)細(xì)研究過(guò),聽(tīng)過(guò)一些網(wǎng)站介紹他們的 優(yōu)化方法時(shí),對(duì)于數(shù)據(jù)庫(kù)主要是采用主從的方法,將數(shù)據(jù)庫(kù)的讀寫(xiě)分離來(lái)提高性能,但是個(gè)人覺(jué)得這種辦法在數(shù)據(jù)量到了規(guī)模的時(shí)候就OVER了,并發(fā)和讀寫(xiě)操作 沒(méi)提升,數(shù)據(jù)也是會(huì)逐漸累計(jì)超過(guò)限制。
互聯(lián)網(wǎng)服務(wù)由于要應(yīng)對(duì)大數(shù)據(jù)量,大請(qǐng)求量,所以在設(shè)計(jì)開(kāi)發(fā)的時(shí)候就不要太學(xué)院派,不要力圖達(dá)到數(shù)據(jù)庫(kù)、程序的設(shè)計(jì)“優(yōu)美”,性能是最要緊的。
您可能感興趣的文章:
- PHP+MySQL投票系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)分享
- PHP+Mysql樹(shù)型結(jié)構(gòu)(無(wú)限分類)數(shù)據(jù)庫(kù)設(shè)計(jì)的2種方式實(shí)例
- MYSQL 數(shù)據(jù)庫(kù)命名與設(shè)計(jì)規(guī)范
- MySQL分表實(shí)現(xiàn)上百萬(wàn)上千萬(wàn)記錄分布存儲(chǔ)的批量查詢?cè)O(shè)計(jì)模式詳解
- MySQL 數(shù)據(jù)庫(kù)設(shè)計(jì)復(fù)習(xí)筆記及項(xiàng)目實(shí)戰(zhàn)
- 基于PHP+MySQL的聊天室設(shè)計(jì)
- MySQL和MongoDB設(shè)計(jì)實(shí)例對(duì)比分析
- 如何設(shè)計(jì)高效合理的MySQL查詢語(yǔ)句
- MySQL 設(shè)計(jì)和命令行模式下建立詳解
相關(guān)文章
MySQL如何對(duì)數(shù)據(jù)進(jìn)行排序圖文詳解
我們知道從MySQL表中使用SQL SELECT語(yǔ)句來(lái)讀取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL如何對(duì)數(shù)據(jù)進(jìn)行排序的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié)
這篇文章主要介紹了MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié),本文總結(jié)了大多數(shù)常用的MySQL數(shù)學(xué)函數(shù),并給出了使用實(shí)例,需要的朋友可以參考下2014-09-09

