数据库-优化-数据库结构的优化-拆分优化
生活随笔
收集整理的這篇文章主要介紹了
数据库-优化-数据库结构的优化-拆分优化
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)據(jù)庫表的垂直拆分
1、垂直拆分定義
所謂的垂直拆分,就是把原來一個(gè)有很多列的表拆分成多個(gè)表,這解決了表的寬度問題。
2、垂直拆分原則
通常垂直拆分可以按以下原則進(jìn)行: 1、 把不常用的字段表單獨(dú)存放到一個(gè)表中。 2、 把大字段獨(dú)立存放到一個(gè)表中。 3、 把經(jīng)常一起使用的字段放到一起。 例子:以film表為例在該表中,title和description這兩個(gè)字段占空間比較大,況且在使用頻率也比較低,因此可以將其提取出來,將上面的一個(gè)達(dá)標(biāo)垂直拆分為兩個(gè)表(film和film_ext):如下所示:
1、
2、
數(shù)據(jù)庫表的水平拆分
1、為什么水平拆分
表的水平拆分是為了解決單表數(shù)據(jù)量過大的問題,水平拆分的表每一個(gè)表的結(jié)構(gòu)都是完全一致的,以下面的peyment表為例來說明
show create table payment; CREATE TABLE `payment` (`payment_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,`customer_id` smallint(5) unsigned NOT NULL,`staff_id` tinyint(3) unsigned NOT NULL,`rental_id` int(11) DEFAULT NULL,`amount` decimal(5,2) NOT NULL,`payment_date` datetime NOT NULL,`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`payment_id`),KEY `idx_fk_staff_id` (`staff_id`),KEY `idx_fk_customer_id` (`customer_id`),KEY `fk_payment_rental` (`rental_id`),KEY `inx_paydate` (`payment_date`),CONSTRAINT `fk_payment_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE,CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE SET NULL ON UPDATE CASCADE,CONSTRAINT `fk_payment_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf82、水平不拆分原因
如果單表的數(shù)據(jù)量達(dá)到上億條,那么這時(shí)候我們盡管加了完美的索引,查詢效率低,寫入的效率也相應(yīng)的降低。
3、如何將數(shù)據(jù)平均分為N份
通常水平拆分的方法為: 1、 對(duì)customer_id進(jìn)行hash運(yùn)算,如果要拆分為5個(gè)表則使用mod(customer_id,5)取出0-4個(gè)值。 2、 針對(duì)不動(dòng)的hashid把數(shù)據(jù)存儲(chǔ)到不同的表中。4、水平拆分面臨的挑戰(zhàn)
1、 夸分區(qū)表進(jìn)行數(shù)據(jù)查詢 前端業(yè)務(wù)統(tǒng)計(jì): 業(yè)務(wù)上給不同的用戶返回不同的業(yè)務(wù)信息,對(duì)分區(qū)表沒有大的挑戰(zhàn)。 2、 統(tǒng)計(jì)及后臺(tái)報(bào)表操作 但是對(duì)后臺(tái)進(jìn)行報(bào)表統(tǒng)計(jì)時(shí),數(shù)據(jù)量比較大,后臺(tái)統(tǒng)計(jì)時(shí)效性比較低,后臺(tái)就用匯總表,將前后臺(tái)的表拆分開。?
?
總結(jié)
以上是生活随笔為你收集整理的数据库-优化-数据库结构的优化-拆分优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库-优化-数据库结构的优化-表范式化
- 下一篇: 数据库-优化-MYSQL的执行顺序