MYSQL数据库设计的一点总结

来源:80s team blog 时间:2008-05-24 09:36:00 

大大小小也搞过一些数据库设计,见过一些其他人的设计,看过些书,总结总结,经验谈。
选表类型:

大家都知道mysql的myisam表适合读操作大,写操作少;表级锁表

innodb表正好相反;行级锁表

互联网服务,不算支付性的服务外,互动产品,新闻系统等等一般都是读多,写少。用myisam表比较合适。

表的设计

定长表:所有列的字段长度都是定长的。可以去查mysql的手册不定长字段是VARCHAR、BLOB或TEXT。int char都是定长的,定长表占用空间会大。
动态表:就是字段不是都定长的。
定长表要比动态表检索速度快。

软件系统的设计习惯是把每张表都分清很明确的功能,比如用户表都是用户信息,如果需要同时从留言表取数据,又从用户表取用户信息的时候,就会采用联合查 询,有的时候一些操作还会用left,join等各种复杂sql语句,没准还要用mysql的函数。如果是针对访问量,读取量很大的互联网服务时,同时并 发去读,数据量又大,很可怕。最好是如果数据不会修改,在常用的表上有冗余字段,能够做到一次读,把数据都拿到;可以有冗余的写操作,但减少复杂的查询操 作。

在设计表的时候要将这个表的所有字段类型占用的字节数求和,并乘以你的预期(如:存储100W数据量),就是整张表未来会占用容量。由于在Linux上 ext2,windows的fat32最大支持文件容量是2G(其他内核及文件系统是否还有不支持超过2G的 没研究过,windows的ntfs支持超过2G),如果你的表未来容量超过2G,那肯定是不行的,要不在接近数量级的时候拆表,要不就提前规划提前拆 表。具体每个字段的占用大小可以去看mysql的手册。

拆表 拆库

拆表就是将一张表复制N多张,里面分别存放不用内容的数据,数据的存放是用HASH算法来决定放入哪张表。

例如用户表user,传统情况就是一张表,拆表就是将表复制为user_01,user_02等里面都存放了格式一样的不同用户数据。

拆库和拆表类似,就是库的复制。

拆表或拆库有很多的HASH算法,主要目的就是减少表的数据量,用算法保证每个表的数据量平均,请求,读写操作被分摊降低压力,而且安全,出了问题最多是一部分用户受影响。缺点就是检索不方便,需要另想办法。

很多网站为了前期省事都会采用discuz的产品,如bbs,blog等,网上有不少关于这个产品的介绍和优化方法,没细研究过,听过一些网站介绍他们的 优化方法时,对于数据库主要是采用主从的方法,将数据库的读写分离来提高性能,但是个人觉得这种办法在数据量到了规模的时候就OVER了,并发和读写操作 没提升,数据也是会逐渐累计超过限制。

互联网服务由于要应对大数据量,大请求量,所以在设计开发的时候就不要太学院派,不要力图达到数据库、程序的设计“优美”,性能是最要紧的。

标签:mysql,表,设计
0
投稿

猜你喜欢

  • Dreamweaver虚拟在线试衣室

    2009-07-05 18:54:00
  • PHP设计模式之模板方法模式Template Method Pattern详解

    2023-05-25 00:24:26
  • Dreamweaver量身打造Wordpress留言板(三)

    2009-12-13 18:45:00
  • ASP中使用Form和QueryString集合

    2007-09-14 10:43:00
  • 巧用一条SQL 实现其它进制到十进制转换

    2009-01-19 13:16:00
  • ASP用户登录模块的设计源码

    2008-10-03 12:16:00
  • 在ASP中用FormatDateTime格式化日期

    2010-08-08 19:16:00
  • mysql 5.5.8的几个注意事项

    2011-01-04 19:34:00
  • 一个小技巧mysql命令行分页

    2011-01-29 16:33:00
  • 设计提升满意度

    2010-05-16 15:00:00
  • Google首页的CSS Sprite

    2007-09-29 21:36:00
  • 符合w3c标准flash插入代码,常用flash参数设置

    2009-01-20 18:47:00
  • asp如何做一个树状展开视图来显示自己的记录结构?

    2010-07-12 18:56:00
  • DHTML实例解析:用HTC统一定制表单样式

    2007-11-04 18:48:00
  • 认识那些被忽略的SQL Server注入技巧

    2009-01-20 13:15:00
  • sql server数据库最大Id冲突问题解决方法之一

    2012-01-05 19:28:42
  • 从客户端提升SQL Server数据库性能

    2009-03-06 14:27:00
  • MYSQL教程:索引和查询优化程序

    2009-02-27 15:52:00
  • js实时获得服务器上时间

    2008-11-25 13:55:00
  • ASP错误大全

    2009-05-26 15:45:00
  • asp之家 网络编程 m.aspxhome.com