MySQL Schema与数据类型的优化

[[207400]]

选择优化的数据类型:

1、 更小的通常更好:

一般情况下,应该尽量使用可以正确存储数据的最小数据类型。更小的数据类型通常更快,因为他们占用更少的磁盘,内存和cpu缓存,并且处理时需要的cpu周期也更少。

2、 简单就好

简单的数据类型操作通常需要更少的cpu周期。例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整型更加复杂。注:应使用mysql内建的类型存储时间和日期,而不是字符串。

3、 尽量避免null

如果查询中包含可为null的列,对Mysql来说更难优化,因为可为null的列使得索引、索引统计和值都比较复杂。可为null的列会使用更多的存储空间,在mysql中也需要特别处理。当可为null的列被索引时,每个索引记录需要一个额外的字节。

通常把可为null的列改为not null带来的性能提升比较小。在调优时,没有必要首先在现有的shema中查找并修改掉这个情况,除非确定这会导致问题。但是如果列上建索引,就应尽量避免设计成可为null的列。

整数类型:

整数类型有TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别使用8,16,24,32,64位存储空间。他们可以存储的值的范围从-2的(n-1)次方到2的(n-1)次方-1,其中n是存储空间的位数。

整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以是正数的上限提高一倍。例如TINYINT UNSIGNED可以存储的范围是0~255,而TINYINT的存储范围是-128~127。

实数类型:

实数是带有小数部分的数字。然后,他们不仅仅为了存储小数部分;也可以使用DECIMAL存储比BITINT还大的整数。MYSQL既支持精确类型,也支持不精确类型。

DECIMAL类型用于存储精确的小数,因为double类型和float类型在进行计算时,会因为精度损失导致一些数据的偏差。但是DECIMAL数据类型cpu不支持对其直接计算,cpu直接支持原生浮点计算,所以浮点运算明显更快。

因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL-例如存储财务数据。但是在数据量比较大的时候,可以考虑使用BITINT代替DECIMAL,将需要存储的货币单位根据小数的位数乘以相应的倍数即可。

字符串类型(varchar和char)

  • Varchar:

Varchar类型用于存储可变长字符串,是最常见的字符串类型。他比定长类型更节省空间,因为它仅使用必要的空间(例如,越短的字符串使用越少的空间)。所以,varchar节省了存储空间,对性能也有帮助。但是,由于行是边长的,在update是可能使行变得比原来更长,这就导致需要做额外的操作。如果一个行占用的空间增长,并且页内没有更多的空间存储。MyISAM会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内。

注:InnoDB更加灵活,它可以把过长的varchar存储为BLOB。

  • Char类型:

Char类型适合存储很短的字符串,或者所有值都接近同一个长度。例如,char类型非常适合存储密码的md5值,因为他是定长的值。还有用户的身份证号以及手机号码。对于经常变更的数据,char也比vachar更好,因为定长的char类型不容易产生碎片。对于非常短的列,char也比varchar在存储空间上更有效率。例如用char(1)存储Y和N的值,如果采用单字节字符集只需要一个字节,但是varchar(1)却需要两个字节,因为还有一个记录长度的额外字节。

Varchar(5)和varchar(200)存储‘hello’时空间开销是一样的,但是Varchar(5)会有很大的优势,因为更长的列会消耗更多的内存,因为Mysql通常会分配固定带下的内存块来保存内部值。尤其是使用内存临时表进行排序和操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕。

时间类型

DateTime和TimeStamp

  • DateTime

这个类型能保存大范围的值,从1001年到9999年,精度为秒。它把日期和时间封装到格式为YYYYMMDDHHMMSS的整数里,与时区无关。使用8个字节的存储空间。

  • TimeStamp:

存储1970年1月1日午夜以来的描述,他和Unix时间戳相同。TimeStamp只使用4个字节的存储空间,因此它的范围比DateTime小的多;只能表示从1970年到2038年。

TimeStamp显示的值也依赖于时区。Mysql服务器,操作系统,以及客户端连接都有时区设置。

TimeStamp也有DATETIME没有的特殊属性。默认情况下,如果插入时没有指定第一个TimeStamp列的值,Mysql会设置这个列的值为当前时间。在插入一行记录时,Mysql默认也会更新第一个TimeStamp列的插入和更新操作。最后,TimeStamp列默认为not null,这也和其他的数据类型不一样。 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/268439.html<

(0)
管理的头像管理
上一篇2025-05-06 21:32
下一篇 2025-05-06 21:34

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注