`

MYSQL数据库设计的一点总结

阅读更多
选表类型:
大家都知道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数据库操作手册.doc

    总结起来,这份手册涵盖了MySQL数据库的基本操作,从创建和管理数据库到数据表的设计和操作,再到数据库优化,提供了全面的学习资源。无论是初学者还是经验丰富的开发者,都能从中受益,更好地理解和运用MySQL数据库...

    mysql导入导出数据库文件

    本文将详细介绍两种常见的MySQL数据库文件导入导出的方法:使用图形化辅助工具和使用MySQL自带的命令行方式。 #### 二、使用图形化辅助工具进行MySQL导入导出 **MySQL GUITools v5.0** 是一套强大的可视化工具集,...

    C#操作mysql数据库的实例

    创建类MysqlConnector并添加引用:我创建的信息如下:创建一个数据表,数据如下:我使用的是进行演示,界面设计...因为最近做了一个C#操作Mysql的小项目,我也是边学边做,总结了一点小工具,稍后会继续与大家分享,感

    mysql-java-8.0.11.zip

    总结来说,“mysql-java-8.0.11.zip”是一个包含MySQL JDBC驱动的压缩包,主要用于Java应用程序与MySQL数据库之间的通信,版本8.0.11提供了对MySQL 8.0特性的支持。开发人员需要这个驱动来实现Java代码与MySQL数据库...

    MySQL建表的规范总结.pdf

    MySQL数据库在设计和使用过程中,遵循一定的规范可以显著提高数据存储效率和查询性能。...综上,这些规范是提高MySQL数据库性能的重要指南,实践中应结合具体业务需求灵活应用,以实现最佳的数据库设计和查询优化。

    Node.js实现连接mysql数据库功能示例

    总结以上,Node.js连接MySQL数据库的过程包括安装必要的npm包、配置数据库连接参数、执行SQL查询等关键步骤。通过上述步骤,我们能够实现Node.js应用程序与MySQL数据库的高效交互,构建稳定可靠的数据驱动型应用。...

    mysql启动关闭bat脚本

    总结来说,"mysql启动关闭bat脚本"提供了一种高效的方法来管理MySQL数据库服务,使得用户无需深入理解复杂的命令行工具就能轻松控制服务状态。这对于日常运维工作或是非专业技术人员来说,无疑大大提升了工作效率。...

    MySQL数据平台设计规范.docx

    总结,MySQL数据平台设计规范涵盖了备份策略、安全措施和SQL编码标准,这些规范的实施能有效保障数据安全,降低风险,提升系统的稳定性和效率。在实际操作中,应结合业务需求不断优化和完善这些规范,确保数据平台的...

    基于PHP MySQL的病案系统的设计与实现.pdf

    与MySQL数据库配合使用,PHP能够快速地处理用户请求,并进行数据的增删改查操作。MySQL作为一种关系型数据库管理系统,它能高效地存储和管理病案数据,支持复杂的数据检索和统计功能,是构建病案系统的理想选择。 ...

    卡乐购3.3版

    在深入探讨之前,我们需要明白一点:该版本的源码运行需要依赖于MySQL数据库,这意味着系统的所有数据存储和处理都将通过这个关系型数据库管理系统来完成。 一、MySQL数据库基础 MySQL是一种开源、免费的关系型...

    学习mysql之后的一点总结(基础)

    在学习MySQL后,我们可以总结出几个关键点,这些要点将帮助新手朋友们更好地理解和运用这个强大的数据库系统。 1. **安装与配置**: - 在Windows环境下,设置系统变量是为了在命令提示符下能直接运行MySQL命令。你...

    毕业论文jsp27排课系统(jsp+servlet+mysql).doc

    我们的系统使用mysql数据库管理系统,设计了以下数据库表: * 排课表:存储排课相关数据。 * 教师表:存储教师相关数据。 * 学生表:存储学生相关数据。 * 课程表:存储课程相关数据。 ER图 我们的系统的ER图主要...

    [MySQL必知必会].Ben.Forta.扫描版(ED2000.COM)

    1. **规范化理论**:为了提高数据存储效率和减少冗余,书中会讲解数据库设计中的规范化理论,即第一范式到第三范式的转换方法。 2. **索引技术**:通过创建适当的索引可以显著提高查询性能。本书会介绍不同类型的...

    免安装MySql

    MySQL是一种流行的开源关系型数据库管理系统,它以其高效、可靠和易于使用而闻名。"免安装MySql"指的是不需要经历传统安装过程,而是可以...同时,合理的数据库设计和权限管理也是确保系统稳定性和安全性的重要环节。

Global site tag (gtag.js) - Google Analytics