mysql创建表时字段类型选择与优化
一、选择原则
1.应该尽量使用可以正确存储数据的最小字段类型
2.选用简单的数据类型,例如:一个是尽量用mysql内置的字段类型来存储日期和时间;另一个存储IP地址尽量用整型;能用整型的尽量不用字符串类型
3.尽量避免使用NULL,例如:打算创建索引的字段,不要设置为NULL
二、常用的字段类型的选择说明
1.日期和时间类型
TIMESTAMP与DATETIME都可以存储相同类型的数据,并且精确到秒,可是TIMESTAMP只使用DATETIME一半的存储空间,并且它可以根据时区变化,具有特殊的自动更新能力。
存储空间:TIMESTAMP占用4个字节,DATETIME占用8个字节
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2018-07-21 15:56:39 |
+---------------------+
1 row in set (0.00 sec)
这两个类型存储的数据格式类似:2018-07-21 15:56:39
将这个值转换成时间戳
mysql> select unix_timestamp('2018-07-21 15:56:39');
+---------------------------------------+
| unix_timestamp('2018-07-21 15:56:39') |
+---------------------------------------+
| 1532159799 |
+---------------------------------------+
1 row in set (0.00 sec)
将时间戳转换成标准时间
mysql> select from_unixtime('');
+-----------------------------+
| from_unixtime('') |
+-----------------------------+
| 2018-07-21 15:56:39.000000 |
+-----------------------------+
1 row in set (0.00 sec)
2.整数类型
tinyint(8bit), smallint(16bit), mediumint(24bit), int(32bit), bigint(64bit)
整数计算一般使用64位的bigint整数,一个细节需要注意的地方,INT(1)与INT(20)对于存储和计算来说宽度是相同的,对于INT型字段来说指定宽度是多余的
3.实数类型
浮点类型(float, double)与decimal类型在性能上,浮点类型更好一些,同样范围的值,浮点类型比decimal占用更少的空间
mysql创建表时字段类型选择与优化的更多相关文章
- MySQL 创建表时,设置时间字段自己主动插入当前时间
MySQL 创建表时,设置时间字段自己主动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) N ...
- oracle与mysql创建表时的区别
oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer ), mid ), time dat ...
- mysql 创建表时注意事项
mysql 创建表时注意事项 mysql 想必大家都不会陌生吧 是我学习中第一个接触的的数据库 已学习就很快上手的 这是一个关系型数据库 不懂什么是关系型数据库 啊哈哈哈 现在知道啦 因 ...
- MySQL创建表时加入的约束以及外键约束的的意义
1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...
- mysql创建表时,设置timestamp DEFAULT NULL报错1067 - Invalid default value for 'updated_at'
问题背景: 线上的linux服务器上的mysql服务器中导出数据库的结构.想要在本地创建一个测试版本 导出后再本地mysql上运行却报错 1067 - Invalid default value ...
- Mysql 创建表时错误:Tablespace for table `tablexx` exists. Please DISCARD the tablespace before IMPORT.
在本地的一个数据库创建表时意外的出现了以下错误,说是表已经存在了 但通过desc 查看表信息时又说表不存在 在本地系统搜索表名却发现一个.ibd文件[InnoDB File] 在删除了该.ibd文件文 ...
- (转)mysql创建表时反引号的作用
试用navicat工具查看现网mysql建表语句时,发现表名和字段名都是反引号引起来的 CREATE TABLE `tab_notice_title_tv` ( `i_id` int(11) NOT ...
- mysql创建表时反引号的作用
试用navicat工具查看现网mysql建表语句时,发现表名和字段名都是反引号引起来的 CREATE TABLE `tab_notice_title_tv` ( `i_id` ) NOT NULL A ...
- Access sql语句创建表及字段类型
创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NUL ...
随机推荐
- Freemarker提供了3种加载模板目录的方法
Freemarker提供了3种加载模板目录的方法 原创 2016年08月24日 14:50:13 标签: freemarker / Configuration 8197 Freemarker提供了3种 ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- .net core 单元测试之 JustMock第一篇
前面介绍了单元测试的框架NUnit,它可以很好的帮助我们建立测试,检验我们的代码是否正确.但这还不够,有时候我们的业务比较重,会依赖其它的类.基于隔离测试的原则,我们不希望依赖的其它类影响到我们的测试 ...
- 创建ASP.NET Webservice
一.WebService:WebService是以独立于平台的方式,通过标准的Web协议,可以由程序访问的应用程序逻辑单元. (1)应用程序逻辑单元:web服务包括一些应用程序逻辑单元或者代码.这些代 ...
- Api接口文档管理工具,你知道哪些呢?
上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的 ...
- ubuntu安装elasticsearch及head插件
1.安装elasticsearch,参考http://www.cnblogs.com/hanyinglong/p/5409003.html就可以了 简单描述下: mkdir -p /usr/local ...
- 那些让你觉得自己是个傻B的题目集锦(大神的降维打击合集)
一起过来排好队,进来挨打 1.Leetcode tag-LinkList 109.convert sorted list to binary search tree 2Leetcode tag-Arr ...
- codeforces 233 D. Table(思维+dp )
题目链接:http://codeforces.com/contest/233/problem/D 题意:问在n*m的矩阵中满足在每一个n*n的矩阵里画k个点,一共有几种画法. 题解:其实这题挺简单的但 ...
- js-DOM ~ 05. Date日期的相关操作、string、查字符串的位置、给索引查字符、字符串截取slice/substr/substring、去除空格、替换、大小写、Math函数、事件绑定、this
内置对象: 语言自带的对象/提供了常用的.基本的功能 打印数组和字符串不用for... in / 打印josn的时候采用for...in Date 获取当前事件: var date = ...
- ssh的秘钥认证
ssh秘钥认证简述 通常我们会使用x-shell.putty.MobaXterm等支持ssh连接的工具去登录服务器进行管理,而执行ssh命令.scp命令等从一台服务器登录另外一台服务器的时候,通常需要 ...