php高性能数据库设计,设计高性能数据库[优化数据库结构]

下载地址:http://download.csdn.net/detail/jiangtongcn/4121176 优化结构的方式 分离用户数据库与系统数据库 创建数据库表分区 创建垂直分表 创建水平分表 数据库对象的部署 混合放置的缺点 在我们创建数据库的时候,一般来说用户数据库默认路径和系统数据

下载地址: http://download.csdn.net/detail/jiangtongcn/4121176

优化结构的方式

分离用户数据库与系统数据库

创建数据库表分区

创建垂直分表

创建水平分表

数据库对象的部署

混合放置的缺点

在我们创建数据库的时候,一般来说用户数据库默认路径和系统数据库是放在一起的,这种部署方式有严重问题:假如有一个第三波书店的数据库,用户对它频繁访问,数据库所在的磁盘吞吐量已经接近极限,那么这个时候系统表就没有更多的资源来使用,就可能导致长时间的排队或者死锁。为了减少多个表之间的资源争夺可以把多个数据库对象分开放在不同的磁盘上。也就是实现分离用户数据库和系统数据库

test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2Fcnblogs_com%2Fjiangtong%2F201203%2F201203101652451786.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fjiangtongcn%2Farticle%2Fdetails%2F7331605

分离用户数据库与系统数据库【降低资源竞争】

减少资源竞争

尽量避免数据死锁

如果数据库已经创建推荐以下实践步骤:

1.分离数据库

2.找到分离后的数据文件和日志文件,分表将日志文件和数据文件复制到不同磁盘的目录下

3.附加移位后的数据库文件还原数据库

文件和文件组

文件和文件组允许跨磁盘、磁盘控制器、RAID创建数据库

比如计算上有四个物理磁盘,那么可以创建一个由三个数据文件和一个日志文件组成的数据库,这样在对数据进行访问的时候四个读写的磁头可以同时并行地访问数据,从而加快数据库操作速度。

test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2Fcnblogs_com%2Fjiangtong%2F201203%2F201203101652521583.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fjiangtongcn%2Farticle%2Fdetails%2F7331605

文件和文件组还允许数据布局,可以在特定的文件组上创建表,这样可以改善性能

我们可以将特定的表所有的IO都定向到一个特定的磁盘,那么如何在文件组上见表?

语法:

CREATE TABLE [表名]

(

--表字段1

--表字段2

) ON [PRIMARY/文件组名]

创建垂直分表

将大型表从字段上分,这叫垂直分表

垂直分表通常是将大型表的大文本字段从原表分离【将大文本字段分离后原来的数据页上每页可以存储更多的数据】,然后存储在其它表中

例如从图书表中将ContentDescription、TOC字段分离出来放在单独的表中,这两个字段是nvarchar(max)类型

test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2Fcnblogs_com%2Fjiangtong%2F201203%2F201203101652576910.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fjiangtongcn%2Farticle%2Fdetails%2F7331605

垂直分表代码示范:

---分离大文本字段

SELECT A.ContentDescription,A.TOC,A.Id

INTO Book_detail

FROM Book A

---从原表中删除原来的大文本字段

ALTER TABLE BOOK

DROP COLUMN CONTENTDESCRIPTION

ALTER TABLE BOOK

DROP COLUMN TOC

创建水平分表

将大型表从数据类别上或者时间字段上分,这叫水平分表

水平分表通常做法比较多,根据不同的业务需求有不同的划分

test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2Fcnblogs_com%2Fjiangtong%2F201203%2F20120310165305163.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fjiangtongcn%2Farticle%2Fdetails%2F7331605

水平分表示范:

SELECT

INTO

BOOK_2008

FROM BOOK

WHERE PUBLISHERDATE>='2008-1-1' AND PUBLISHDATE

SELECT

INTO

BOOK_2009

FROM BOOK

WHERE PUBLISHERDATE>='2009-1-1' AND PUBLISHDATE

SELECT

INTO

BOOK_2010

FROM BOOK

WHERE PUBLISHERDATE>='2010-1-1' AND PUBLISHDATE

注意:事前良好的数据库设计【预计数据规模负荷有多大决定是否采用水平分表】胜过事后进行水平分表【事后分表可能引起程序较大改动】。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值