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

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

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的引擎。)

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列进行索引,不过我不建议。

修改mysql 表数据翻倍_【原创】关于MySQL表设计应该注意的问题(做了点修改)相关推荐

  1. mysql 插入数据 自增长_如何在MYSQL插数据 ID自增

    2种解决办法 1.修改你的数据库表,将ID设为自增长,注:只有主键才可以设置为自增长 例:CREATE TABLE `message ` (`id` INT(8) NOT NULL AUTO_INCR ...

  2. mysql 获取数据列号_如何获得mysql数据库的所有的列

    命令行下直接用:descrbe 表名 hive也是一样的. 用查询: SELECT  COLUMN_NAME FROM  `information_schema`.`COLUMNS` where  ` ...

  3. SQL server关联字段中出现中英文括号导致数据翻倍

    今日开发过程中遇到的一个小问题,稍不注意会引起数据翻倍. 以下是例子数据,可以看到了一个是中文括号,一个是英文括号. 该表进行自连接,这两条数据会出现四条. 原因: 表的字符集是Chinese_PRC ...

  4. mysql跨库分页查询_跨库跨表分页

    前言 之前经常思考的一个问题,数据库分表后,分页怎么做才是最好的方案呢?今天就来整理一波. 由来 首先是由来,数据量增大,一张表数据太多的话,会使用分表.同理,一个数据库实例到达瓶颈,所以可能需要分库 ...

  5. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答

    1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...

  6. python作业:有一个学生成绩表,包括学号、姓名、高数、英语,计算机。 录入若干个学生学号、姓名、高数、英语,计算机5项数据。 将学生成绩表数据写入文件,文件名为“学生成绩表.txt

    1.有一个学生成绩表,包括学号.姓名.高数.英语,计算机. 录入若干个学生学号.姓名.高数.英语,计算机5项数据. 将学生成绩表数据写入文件,文件名为"学生成绩表.txt import cs ...

  7. SQL Server 常用更新语句,用B表数据作为条件或数据源更新A表数据

    SQL Server 常用更新语句,用B表数据作为条件或数据源更新A表数据 示例:用B表姓名覆盖A表姓名 假设: A表数据 Id,Name 1,张三 B表数据 Id,Name 1,李四 用下面这个语句 ...

  8. mysql单张表数据量极限_极限数据量范围的安全测试

    mysql单张表数据量极限 When we develop security testing within inconsistent data volume situations, we should ...

  9. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞

    有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...

最新文章

  1. form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。...
  2. 神经网络(Neural Network)
  3. 解读Raw Socket
  4. C# 语言历史版本特性(C# 1.0到C# 8.0汇总)
  5. 【BZOJ-14492895】球队收益球队预算 最小费用最大流
  6. java搭建环境配置_JAVA开发环境的搭建(配置JAVA开发环境)
  7. 二叉树中和为某一值的路径(一)(C++)
  8. F - 最短路 HDU - 2544(最短路的模板)
  9. game design原理系列学习笔记(四)
  10. unity安装后 启动失败_Unity3D插件安装常见问题说明
  11. 智能家居竞品分析:米家/HomeKit/美居/涂鸦智能的体验与思考
  12. 基于JAVA的即时通信软件
  13. C++函数模板及隐式实例化、显式实例化、显式具体化、模板重载
  14. 一篇文章搞懂数据仓库:数据治理(目的、方法、流程)
  15. PayPal支付集成到自己Web网站
  16. 微服务并不能修复你破碎的组织文化
  17. 以太坊ETH源码分析(1):地址生成过程
  18. 通过电脑远程链接termux
  19. 使用 Amazon SES API 发送原始电子邮件
  20. PowerBI-日期和时间函数-EOMONTH

热门文章

  1. Word文档怎么删除html标签,Word文档中怎么删除空白页?删除空白页的六种方法
  2. matlab 生理数据预警,PhysioNet生理信号处理(三)--WFDB Toolbox for Matlab
  3. [ 物联网篇 ] 41 - 嵌入式系统中的epoll_wait 的异常处理
  4. 2022N1叉车司机考试题模拟考试题库及答案
  5. 如何介绍世界上第一台计算机,[世界第一台计算机]计算机简单的自我介绍第一篇...
  6. html链接打开excel,龙三公子博客-win7/10下excel表格中的文本链接如何变成可点击打开的网址链接(超链接)后又提示可打开此文件的应用程序没有注册?...
  7. 非锐化掩蔽(Unsharp Masking)与高提升滤波
  8. CSDN社区分享面试经历活动作品21——这段时间的几个面试
  9. 信鸽推送集成与踩过的坑
  10. POJ 3414 Pots(深搜并打印路径)