mysql 建表时,我们应该考虑的数据类型

本文从《高性能MySQL》中摘录了关于如何选择最优数据类型的几个原则:更小通常更好、简单就好以及尽量避免null,并解释了这些原则带来的好处。

本文是由《高性能mysql》摘录而来

 

如何选择最优的数据类型,请看下面几个原则

(1)更小通常更好

       好处:占用更少磁盘、内存和cpu缓存,处理时需要的cpu周期更少

 

(2)简单就好

      简单数据类型通常需要更少的cpu周期,例子:用mysql内建日期类型(date,dateTime,timestample)而不是字符串来存储日期,用整型存储ip

 

(3)尽量避免null

       null的列不容易进行查询优化;null列需要更多的存储空间(mysql做特殊处理);null列被索引时,每个索引需要一个额外的字节,在myisam里还可能会导致固定大小的索引。

       如果计划在该列上建立索引,那么,建议避免设置null

提供的引用内容未提及MySQL主键可以使用数据类型。一般而言,MySQL主键可以使用多种数据类型,常见的有以下几类: ### 整数类型 - **TINYINT**:非常小的整数,占用1个字节存储空间,有符号范围是 -128 到 127,无符号范围是 0 到 255。 - **SMALLINT**:小整数,占用2个字节,有符号范围是 -32768 到 32767,无符号范围是 0 到 65535。 - **MEDIUMINT**:中等大小整数,占用3个字节,有符号范围是 -8388608 到 8388607,无符号范围是 0 到 16777215。 - **INT**:普通大小整数,占用4个字节,有符号范围是 -2147483648 到 2147483647,无符号范围是 0 到 4294967295。 - **BIGINT**:大整数,占用8个字节,有符号范围是 -9223372036854775808 到 9223372036854775807,无符号范围是 0 到 18446744073709551615。 示例代码如下: ```sql CREATE TABLE example_table ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` ### 字符串类型 - **CHAR**:固定长度字符串,最大长度为 255 个字符。当存储的字符串长度小于定义的长度,会用空格填充。 - **VARCHAR**:可变长度字符串,最大长度为 65535 个字符。只占用实际存储字符串的字节数加上 1 到 2 个字节来记录长度。 示例代码如下: ```sql CREATE TABLE user_table ( user_id VARCHAR(20) PRIMARY KEY, user_name VARCHAR(50) ); ``` ### 日期和间类型 - **DATE**:用于存储日期,格式为 'YYYY-MM-DD',范围从 '1000-01-01' 到 '9999-12-31'。 - **DATETIME**:用于存储日期和间,格式为 'YYYY-MM-DD HH:MM:SS',范围从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。 示例代码如下: ```sql CREATE TABLE event_table ( event_date DATE PRIMARY KEY, event_name VARCHAR(100) ); ``` ### 二进制类型 - **BINARY**:固定长度的二进制字符串,最大长度为 255 个字节。 - **VARBINARY**:可变长度的二进制字符串,最大长度为 65535 个字节。 示例代码如下: ```sql CREATE TABLE binary_table ( binary_id BINARY(16) PRIMARY KEY, data BLOB ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值