MySQL数据库表设计中的注意事项

一、设计原则

1.选择优化的数据类型

MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要。不管选择何种类型,下面的简单原则都会有助于做出更好的选择:

(1).更小通常更好

一般来说,要试着使用正确地存储和表示数据的最小类型。更小的数据类型通常更快,因为它们使用了更少的磁盘空间、内存和CPU缓存,而且需要的CPU周期也更少。

但是要确保不人低估需要保存的值,在架构中的多个地方增加数据类型的范围是一件极其费力的工作。如果不确实需要什么数据类型,就选择你认为不会超出范围的最小类型。

(2).简单就好

越简单的数据类型,需要的CPU周期就越少。例如:比较整数的代价小于比较字符,因为字符集和排序规则使字符比较更复杂。

(3).尽量避免空(NULL)

要尽可地把字段定义为NOT NULL 。即使应用程序无须保存NULL,也有许多表包含了可为空的列,这仅仅是因为它为默认选项,除非真的要保存NULL,否则就把列定义为NOT NULL。

因为mysql难以优化了使用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列需要更多的存储空间,还需要在MySQL内部进行特殊处理。当可空列被索引的时候,每条记录都需要一个额外的字节,还能导致MyISAM中固定大小的索引(例如:一个整数列上的索引)变成可变大小的索引。

即使要在表中存储可为空的字段,也是有办法不使用NULL的,可以考虑使用0,特殊值或字符串来代替它。

需要注意:虽然把NULL列改为NOT NULL 带来的性能提升很小所以除非确定它引入了问题,否则就不要把它当成优先的优化措施。但如果计划对列进行索引,就要尽量避免把它设置为可为空(NULL)


二、字段类型的选择

1.整数

数字有两种类型:整数和实数。

(1)INT数据类型可以用来保存那些不包含小数点的数字。INT代表整数。

默认长度:有些整数类型以及他们最多所能拥有的数字位我们必须有所了解:

  ·TINYINT——这个类型最多可容纳三位数。

  ·SMALLINT——最多可容纳五位数。

  ·MEDIUMINT——最多可容纳八位数。

  ·INT——可以容纳十位数。

  ·BIGINT——最多可容纳二十位数。

     存储空间: 如果存储整数,就可以使用这几种整数类型: tinyint, smallint, mediumint, int, bigint  ,它们分别需要 8、16、24、32、64位 存储空间。

(2)整数类型有可选的unsigned(无符号)属性,它表示不允许为负数,并大致把正上限提高了一倍,例如:tinyint unsigned保存的翻围为0到255,而不是-127到128。

Signed(有符号)和unsigned(无符号)类型占用的存储空间是一样的,性能也一样。因此可以根据实际情况采用合适的类型。

你的选择将会决定MySQL把数据保存在内存中还是磁盘上,然而,整数运算通常使用64位的bingint整数。

MySQL还允许你对整数类型定义宽度,比如int(11)。这对于大在多数应用程序是没有意义的,它不限制值的范围,只规定了mysql的交互工具(例如命令客户端)用来显示字符的个数。对于存储计算,int(1)和int(20)是一样的。


2.实数

实数有分数部分,然而,它们并不仅仅是分数。可以使用decimal保存比出bigint还大的整数。MySQL同时支持精确与非精确类型。

(1)Float和double类型支持使用标准的浮点运算进行近似计算。如果想知道浮点运算到底如何进行,则要研究生平台浮点数的具体实现。

比较起decimal类型,浮点类型保存同样大小的值使用的空间通常更小,float类型占用4个字节,double占用8个字节,而且精度更大,范围更广。和整数一样,你选择的仅仅是存储类型。mysql在内部对浮点类型使用double进行计算。

(2)由于需要额外的空间和计算开销,只有在需要对小数进行精确的时候才使用decimal,比如保存金融数据。

DECIMAL最适合保存那些将被用于计算的数据。在MySQL中,我们可以指定保存一些正当的数字。还可以指定是否允许存在负值。

指定DECIMAL类型的长度会有些棘手。例如,如果你需要在小数点前面保存五位数,且小数点后只保留三位,那么在数据库中其适当的长度将是:Decimal(5+3,3)或 Decimal(8,3),可以使用的数据包括:12345.678,56872.690&#x

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计 MySQL 时,有一些注意事项需要考虑: 1. 数据类型选择:选择正确的数据类型对于的性能和数据存储是至关重要的。根据数据的特性和大小,选择适当的整数类型、字符类型、日期类型等。 2. 主键设计:每个应该有一个主键,用于唯一标识每一行数据。常见的主键类型包括自增整数、UUID、GUID等。选择合适的主键类型取决于你的具体需求。 3. 索引设计:索引可以提高查询的效率,但过多或不正确的索引设计可能导致性能下降。根据经常使用的查询条件和排序需求,选择合适的列创建索引。 4. 规范化与反规范化:根据数据库的范式理论,将数据组织成适当的结构可以提高数据的一致性和减少冗余。但在某些情况下,为了提高查询性能,可能需要进行反规范化处理。 5. 外键约束:如果之间存在关联关系,使用外键约束可以确保数据的完整性和一致性。外键约束还可以自动处理关联的更新和删除操作。 6. 字段命名规范:选择清晰、一致的字段命名规范可以提高代码的可读性和维护性。建议使用有意义的字段名,并遵循一定的命名规范,如驼峰命名法或下划线命名法。 7. 数据库性能优化:在设计结构时,考虑到数据库的性能优化是非常重要的。可以通过合理的划分、查询优化、缓存等手段提高数据库的性能。 8. 安全性考虑:在设计时,需要注意数据的安全性。避免存储敏感信息,如密码明文,使用加密算法对敏感数据进行加密存储。 这些是设计 MySQL 时需要注意的一些事项,根据具体的业务需求和性能要求,还可能会有其他考虑因素。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值