`
kongzimengsheng1
  • 浏览: 68504 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于MySQL表设计应该注意的问题(做了点修改)

阅读更多
关于MySQL表设计应该注意的问题(做了点修改)

关于设计表时应该注意的问题

如有错误欢迎大家指出。这段时间在家里,做了点修正。

1、慎重选择表名。

有两种选择:

按照多数开发语言的命名规则。比如(myCustomer)。

按照多数开源思想命名规则。比如(my_customer)。

按照咱们中国人的思想。比如(我的客户)。

第一种有个缺点,很容易忘掉大写的字母。

第二种则比较好,每个WORD间用下划线连接,避免遗忘。

第三种建议不要用,虽然很好记。不觉得解析这个表的时候还需要编码转化吗?我个人理解,大家可以补充。

2.  关于编码的设定。

A.             GBK/GB2312.(适用于纯中文存储)。

B.           UTF8.(适用于中英文混合存储)。

C.            LATIN1。(适用于纯英文存储)。

D.     其他的。

3. 关于表引擎的选择。

A.                 MYISAM.(很多人说她的表级锁定会带来好多问题,其实只要设计好对应的表以及写好对应的SQL查询就没有那么大的问题。)

B.                  INNODB. (如果要用到事务,选择她不会错。至于多数人讲的MASTER/SLAVE结构上用INNODB在MASTER的选择是否正确,就要看你怎么用了。不能一味的疯狂使用INNODB。除非你想要确保非常高可用性,

)

C.                  CSV. (以前我写过文章,关于这个引擎。个人觉得最主要的是来存储少量数据以及从EXCEL到MYSQL的转换方面会很有用。当然只要涉及到规则数据的导入,她就可以办到。)

D.                  BLACKHOLE. (觉得最完美的用处在于MASETR/SLAVE上面,并且MASTER是一个临时的专门负责写的机器。不过缺点也很多,会与MYISAM或者INNODB或者其他的引擎有所冲突,这点自己要做个权衡)。

E.                   MEMORY. (应该说是MYISAM的兄弟了。不过在读内存总比读磁盘的速度要快。不过要注意,它不支持动态数据类型)。

F.                   FEDERATED. (典型的分布式引擎。我以前文章中有介绍。)

G.    NDB。(网络版存储引擎。因为Replication 总是有延迟,所以如果系统容不得任何延迟,就用这个吧。)
   H.    FOLCON。(6.0后用来代替INNODB的引擎。)

I.                  其他旧的以及新开发的引擎具体介绍:http://dev.mysql.com/doc/refman/6.0/en/storage-engines.html)。

4. 关于属性数据类型的选择。

A.                  INT(一个字节的TINYINT,两个字节的SMALLINT,三个字节的MEDIUMINT,四个字节的INT,8个字节的BIGINT。记住:UNSIGNED不管你定义或者不定义,都不影响内部的存储字节大小)

B.                   少于10个字符用CHAR是在合适不过了。(不过要记住在MEMORY引擎里面会自动把VARCHAR转化为CHAR)

C.                   我一般用DECIMAL或者NUMERIC来代替FLOAT 或者DOUBLE。因为老板要求精确的数字。如果不要求精确的,那就用FLOAT吧。速度快,占空间小。(DECIMA、FLOAT(P)是动态存储。比如:DECIMAL(10,2)占用5个字节。FLOAT占4个字节,)

D.                 BLOB,TEXT,VARCHAR(一般存放文章内容,特别是新闻网站。需要的字节数是所存储的字符长度+1。记住BLOB和VARCHAR是TEXT和CHAR的BINARY类型)

E.                   ENUM(在一定范围内绝佳的代替VARCHAR和CHAR的工具,因为她只占一到两个字节。)

F.                   时间和日期类型(占3个字节的DATE,8个字节的DATETIME,4个字节的TIMESTAMP,3个字节的TIME,1个字节的YEAR。)。如果要存储比如‘1983’这样的年份,用YEAR明显比VARCHAR或者CHAR要节省空间。因为后者要占5个字节。

G.                  BOOLEAN(用来存储YES或者NO之类的值,占用一个字节。)

H.                  关于自增字段。目前我们的项目中涉及到好多ORDER BY RAND()操作。此类语句在数据库并发大的时候会造成CPU严重阻塞,持续产生数据库死锁!解决此类问题最好的办法就是利用自增字段,用程序随即生成数字序列,或者在数据库端随即生成数字序列。

I.                    关于ZEROFILL。非常好用的前置填补0的存储,而不是用用对应个数的空串来代替。在需要前置补零的操作中INT ZEROFILL可以用来代替CHAR或者VARCHR。

5.  关于默认值。

A.                  在5.0之后,只要设定字段为NOT NULL,系统自动给出默认值。对应CHAR->’’,INT->0,BOOLEAN->0等等。

B.                   在5.0之前的版本,需要手动指定默认值,否则会出现一定的异常。到时候查都不好查了。

6.  关于多数据库建立。

A.                  应该把对应的业务放在各自不同的数据库里,而不是所有业务放到一个库里面。

B.                   数据库的命名和表命名一样。

7.  关于索引。

A.                  设计表初期尽量考虑到应该建立的索引。所有建立的索引一定要测试一下,看是否有必要,否则会翻倍的减少写数据的性能。

B.                   对于只有存储0或者1的列,尽量干掉索引,单独分出两个表。一个代替0,另外一个代替1。或者在一个字段里面用EMUM或者CHAR(0)或者CHAR(1)来代替。
   PS: 最后一个要值得注意的,就是尽量所有的字段用NOT NULL。虽然MYSQL可以对NULL列进行索引,不过我不建议。

分享到:
评论

相关推荐

    从excel模版生成数据库表DDL,excel设计mysql,excel设计表格模板转成mysql表文件,

    "从Excel模版生成数据库表DDL,excel设计mysql,excel设计表格模板转成mysql表文件"这个主题涉及到了一种高效且直观的方法,它允许开发人员或数据库管理员使用熟悉的Excel工具来设计数据库结构,然后自动转换为MySQL...

    phpmysql网站设计

    此外,还需注意SQL注入的安全问题,通过预处理语句或参数化查询来防止恶意输入。 网站设计还包括前端界面的创建,通常使用HTML、CSS和JavaScript。HTML定义网页内容结构,CSS负责样式设计,JavaScript处理客户端...

    MySQL修改表结构.doc

    在MySQL数据库中,修改表结构是一项常见的操作,用于适应数据模型的变化或优化表的设计。本文主要探讨了如何在已有数据的情况下安全地修改表的字段类型、约束条件、字段位置以及字段名称,同时强调了在执行这些操作...

    mysql问题,常见的mysql面试问题

    ### MySQL常见面试问题详解 #### 1. MySQL简介与特性 - **MySQL**:MySQL是一种关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前由Oracle公司维护。它以其高性能、高可靠性和易用性著称,在互联网行业...

    mysql知识点.docx

    MySQL 数据库设计知识点 MySQL 是一种关系型数据库管理系统,具有高性能、可靠性和安全性等特点。在实际开发中,合理设计数据库的结构和表结构是非常重要的。下面是 MySQL 数据库设计中的一些重要知识点: 1. 表...

    Oracle数据库表转换为Mysql

    "Oracle数据库表转换为Mysql" Oracle数据库表转换为Mysql是指将Oracle数据库中的表结构转换为Mysql...但是在转换过程中,需要注意表结构的更改、数据长度的限制和用户权限的处理等问题,以确保转换的正确性和安全性。

    mysql操作常用问题解决

    以上就是关于"mysql操作常用问题解决"的一些关键知识点,涵盖了MySQL数据库的基础使用、管理、优化和故障排查等方面,对于日常操作和维护MySQL数据库非常有帮助。通过学习和实践这些内容,可以有效地提升MySQL数据库...

    MySQL保存emoji表情

    因此,在设计与无线互联网相关的MySQL数据库时,推荐采用UTF-8mb4字符集来确保能够妥善处理emoji表情符号,避免出现数据存储或显示上的问题。 #### 限制 使用UTF-8mb4字符集的前提条件包括: - MySQL服务器版本需...

    MYSQL

    10.2.7 MySQL 怎样使用内存 10.2.8 MySQL 怎样锁定数据库表 10.2.9 数据库表级锁定的问题 10.3 使你的数据尽可能小 10.4 MySQL 索引的使用 10.5 存取或更新数据的查询速度 10.5.1 估计...

    MySQL锁类型以及子查询锁表问题、解锁1

    在MySQL中,主要存在两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。InnoDB存储引擎默认支持行级锁,而MyISAM只支持表级锁。 行级锁能提供更高的并发性能,因为它只锁定操作影响的具体行...

    MySQL数据表添加字段

    在MySQL数据库管理中,添加字段是一项常见的操作,用于在已有的数据表中增加新...此外,良好的数据库设计原则要求在设计初期尽可能考虑全面,避免频繁更改表结构。不过,随着业务需求的变化,适时的调整仍然是必要的。

    Eclipse+MySQL数据库课程设计

    在开发过程中,还需要注意以下几点: - 数据库设计:确保数据库设计合理,遵循第三范式,减少冗余数据。 - 安全性:使用预编译SQL语句防止SQL注入攻击,对敏感信息如密码进行加密存储。 - 错误处理:良好的错误处理...

    MySQL中文参考手册.chm

    10.2.7 MySQL 怎样使用内存 10.2.8 MySQL 怎样锁定数据库表 10.2.9 数据库表级锁定的问题 10.3 使你的数据尽可能小 10.4 MySQL 索引的使用 10.5 存取或更新数据的查询速度 ...

    MySQL中文参考手册

    + 4.15.2 启动 MySQL 服务器的问题 + 4.15.3 自动启动和停止 MySQL + 4.15.4 选项文件 o 4.16 升级和降级(downgrading)时有什么特别要做的事情吗? + 4.16.1 从一个 3.22 版本升级到 3.23 + 4.16.2 从一个 ...

    MySql 5.1 参考手册.chm

    7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...

    MySQL 5.1中文手冊

    7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...

    MySQL 5.1参考手册

    7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关...

    同步mysql表结构.zip

    在开发过程中,随着需求的变化,可能需要频繁地修改表结构,这就涉及到了表结构的同步问题。 表结构同步主要分为两方面:本地到远程和远程到本地。在团队协作中,每个开发者可能有自己的数据库副本,当一个人修改了...

Global site tag (gtag.js) - Google Analytics