当前位置:首页 > 日记 > 正文

请选择适当的列

请选择适当的列
思维导图
点击图片看大图。
介绍

情况:如果您的表结构设计不好或索引设计不好,请优化表结构设计,并给出适当的索引,这样您的查询性能可以增加几个数量级。

我们想提高业绩,需要考虑的因素:

1。建筑设计
2。设计指标
三.评估查询性能
今天我们要讨论的是列表的设计,而不是索引设计,我将在下一章讨论索引设计。
选择数据类型

选择正确的数据类型对于提高性能至关重要。
这里有几个原则可以帮助你选择哪种类型。

1,小的通常更好。
使用最小的数据类型。更少的磁盘空间、内存和CPU缓存。所需的CPU周期更少。

2,简单。
整数成本小于字符,因为字符集和排序规则使字符更复杂。
1 MySQL构建的类型(如时间戳、日期)优于字符串保存的使用。
2 >使用整数保存IP地址。

三.尽量避免NULL -如果您打算对列进行索引,请尽量避免将列设置为null。
尽可能地将字段定义为null。您可以将默认值设置为,,0,特别字符串。
原因:
(1)MySQL很难优化空列,空列将使索引、索引统计和值更复杂。
(2)空列需要更多的存储空间,需要在MySQL中进行特殊处理。
(3)空里加指数,每个记录需要额外的字节,也造成了固定大小的MyISAM为可变大小的指标。

我们应该遵循以下两个步骤来确定列的数据类型。

第一步是粗略地确定数据类型。判断是数字、字符串、时间等等。

第二步,确定具体类型。

许多数据类型可以保存相同的数据类型,但我们必须找出在存储范围方面的差异,准确度和物理空间(磁盘或内存空间)。例如,日期和时间戳可以保存相同的数据类型:日期和时间,时间戳的使用空间的一半日期时间;可节省时间区;有一个特殊的自动更新功能。
趣味数据类型

整数

1,存储类型——数据范围从- 2(n-1)到2(n-1)- 1,其中n是所需存储空间的位数。
类型名称所占的位数的8 - 2 ^ TINYINT 7 ~ 2 ^ 7-1 SmallInt 16 2 15 2 ^ ~ ^ 15-1 MEDIUMINT 24 - 2 23 2 ^ ~ ^ 23-1 int 32 2 31 2 ^ ~ ^ 23-1 bigint 64 - 2 63 2 ^ ~ ^ 63-1

2、符号属性表明,负数是不允许的,和积极的上限是大约增加了一倍。例如,字段符号的范围是0到255,而不是127到128
3,MySQL定义了一个整数类型的宽度,如int(1)和int(22),它们对于存储和计算都是一样的,只使用MySQL的交互工具(如命令行客户机)来显示字符数。

实数

实数有小数部分(小数部分)。
存储类型:浮点和双十进制。
占用大小:浮动4字节,双8字节。十进制受到MySQL版本的影响,早期版本有254个数字,超过5的数字。
差异:1、浮点和双支持标准浮点运算用于近似计算。
2,十进制执行十进制运算,而CPU不支持直接计算它。浮点运算比较快,因为计算直接在CPU上完成。
3,十进制只是一种存储格式,当计算时它将被转换为double类型。
4、十进制(组)使用9个字节,小数点的前4个字节,1字节,小数点,小数点后4位。
5,十进制仅在十进制精确计算时使用,如节省财务数据。

字符串类型

1、varchar
(1)保存可变长度字符串。
理解:它需要的存储空间比固定长度的少,因为它只占用的空间,你需要。例外:通过row_format =固定创建MyISAM表,它使用一个固定长度的空间的每一行,可能造成浪费。
(2)存储长度信息。如果定义的列是小于或等于255,则使用1个字节存储的长度值,假设使用latin1字符集,如varchar(10),将占用11字节的存储空间。反过来,varchar(1000)占用1002字节的存储空间。
(3)节省空间和帮助性能。
(4)在5以上,MySQL将保留字符串结尾处的空格,不管它是值还是保存。

只分配真正需要的空间
它是使用VARCHAR相同(5)和varchar(200)为save'hello'occupancy空间。这应该是指在磁盘空间。
那么使用短柱有什么好处呢巨大的优势
大柱将使用更多的内存,因为MySQL通常会分配一个固定大小的内存块(例如varchar(200)将使用200个字符大小的内存空间)保存值(然后修剪操作值,最后到磁盘)或价值。这种排序或使用基于内存的临时表是坏的。
2、焦
(1)定长。
(2)当保存值时,删除结束处的空格。

(3)char通常用于长度相同的短字符串或字符串,如果存储用户密码的MD5哈希值,它总是相同的长度。
哪里是比varchar字符
1 > >比varchar经常改变的值,因为固定长度不易产生碎片。Varchar通常是合适的时长远远大于平均长度,并更新很少发生。
2 > >很短柱,char的效率也高于varchar。单字节字符集(如latin1),char(1)只占用1个字节,而varchar(2)占用2字节(一个字节用于存储长度信息)。
3、文本
它是用来保存大量数据的。
(1)InnoDB将使用外部存储区保存的时候都大,需要保存的实际值,足够的外部存储空间。
(2)排序方式不同于其他字符类型。它不会根据全长排序,但只有通过指定的max_sort_length第一字节。
U3000
4。使用而不是字符串类型的枚举
(1)枚举列可以存储65535个不同的字符串。
(2)以紧凑的方式保存,根据列表中的值将它们压缩到1到2字节。
(3)MySQL将每个值存储在一个整数中,以指示列表中值的位置。
(4)查找表保留为代表的整数和字符串的映射表的文件。
(5)枚举文字列是固定的,和修改表是用来添加和删除字符串。
(6)使用情况:使用枚举来拯救Y值和n值表的权限。
使用方法uff1a
当以用于枚举列,它是按数字而不是字符串排序。
日期和时间类型
日期:拯救一个宽的范围内的值。封装格式:yyyymmddhhmmss,时区无关,使用8字节的存储空间。

时间戳:保存1970年1月1日午夜以来的秒数(格林尼治标准时间)。使用4字节的存储空间。
时间戳是常用的,它更节省空间比datetime。有时人们拯救Unix时间戳作为一个整数值,但这通常是不好的。这种格式不是处理非常方便,我们不推荐。
经验谈

1。当我们选择该列的数据类型,我们不仅要考虑存储类型的大小,而且MySQL如何计算和比较它们。例如,MySQL将枚举并设置类型为整数的范围内,但将它们转换为字符串的比较。

2,我们希望在相关的表中使用相同的类型,这些类型应该精确匹配,包括未签名的属性。

三.不同类型的数据类型会导致性能问题,即使没有性能问题,隐式类型转换也可能导致不知道错误。

4,选择最小的数据类型来考虑成长的空间,将被排除在未来。例如,在中国的省份,我们知道不会有成千上万,所以我们不必使用int.tinyint是不够的。它比int小3字节。

5。整数通常是最好的数据类型,因为它是快速和可以使用auto_increment。

6、尽量避免字符串作为一列数据类型尽可能因为他们占用了大量的空间,通常要在integer.myisam型慢使用压缩索引字符串的默认,使查找更慢。

U3000 U3000
总结

如果有错误,我想请大侠教一两个。

参考资料:高性能MySQL

相关文章

Windows8.1系统更新双击IE11图标没

Windows8.1系统更新双击IE11图标没

图标,双击,响应,系统,无法启动,Comments: some friends who use the Win8 system or use Win8.1 system find that after the system is automatically updated, double-click the IE11 icon, IE11 can't even start. 如果遇到类似的情况,…

你启动win7pe工具箱安装使用图文教

你启动win7pe工具箱安装使用图文教

安装使用,图文教程,启动,电脑软件,win7pe,点评:首先,你开始windows7pe工具箱下载到本地计算机。建议下载到计算机桌面,然后很容易地找到它,然后按照以下步骤进行操作。 1。首先下载你开始windows7pe工具箱到电脑的地方,建议下载到电脑桌面(方便自…

的zhudongfangyu.exe过程可以删除

的zhudongfangyu.exe过程可以删除

删除,的是,过程,电脑软件,zhudongfangyu,评论:zhudongfangyu.exe过程的详细解释 打开任务管理器出现在文件的过程;zhudongfangyu.exe过程;但很多网民都不清楚流程是什么,然后介绍zhudongfangyu.exe小编辑是什么的过程中,可以删除相关内容。 zhu…

oracle系统变量函数使用指南

oracle系统变量函数使用指南

系统变量,使用指南,函数,电脑软件,oracle,Oracle函数有很多种,其中一种是系统变量函数。介绍了三种最常见的系统变量函数。 oracle系统变量函数: 1)系统日期 函数返回当前日期和时间。返回Oracle服务器的当前日期和时间。 从双选择sysdate…

MySQL存储过程使用一个实例详细的

MySQL存储过程使用一个实例详细的

解决方案,存储过程,实例,详细,电脑软件,示例1,一个简单存储过程游标的示例 复制代码代码如下所示: $分隔符 如果程序存在getuserinfo美元下跌 创建程序getuserinfo(在date_day DateTime) — 一个例子 -存储过程命名为:getuserinfo 该参数是:date_…

表XXX标记为撞上(自动)在MySQL(自动)

表XXX标记为撞上(自动)在MySQL(自动)

撞上,标记,电脑软件,XXX,MySQL,网站的MySQL数据库中有如下错误: 复制代码如下:表。 dnzsw04_archives '标记为撞上(自动) 问题是,相关表损坏,在一般情况下,表可以修复与phpMyAdmin。 如果它是一个独立的服务器,您也可以使用命令行来修复它: 复制代…

nicconfigsvc是nicconfigsvc.exe-

nicconfigsvc是nicconfigsvc.exe-

电脑软件,nicconfigsvc,exe,评论:详细的介绍了nicconfigsvc.exe - nicconfigsvc过程 进程文件:nicconfigsvc或nicconfigsvc.exe 过程名称:戴尔电源管理模块 过程类别:安全风险的过程 英文描述: nicconfigsvc.exe是一个网络的电源管理设置相关…

incdsrv.exe过程的作用是什么的inc

incdsrv.exe过程的作用是什么的inc

作用,过程,电脑软件,incdsrv,exe,点评:incdsrv.exe是前尼禄光盘刻录软件的一部分 进程文件:incdsrv或incdsrv.exe 工序名称:前尼禄政府服务 过程类别:安全风险的过程 英文描述: incdsrv.exe是前尼禄系统服务设置为自动安装InCD时。这个过程被…

win7开机动画的异常解决绿色滚动条

win7开机动画的异常解决绿色滚动条

滚动条,开机动画,异常解决,电脑软件,Vista,点评:四种颜色的球的旋转和集成Windows win7开机动画默认的标志,现在已经启动动画的一些朋友是错的,但Vista像绿色的滚动,也不怎么修改回来,在这里与大家分享一个好方法,感兴趣的朋友可以看看 win7开机…

解析MySQL多表查询的实现

解析MySQL多表查询的实现

多表查询,电脑软件,MySQL,查询是数据库的核心。这里我们将介绍如何实现MySQL多表查询。如果您遇到mysql多表查询中的问题,可以查看一下。 MySQL多表查询: 复制代码代码如下所示: 如果不存在,创建表(联系人) contact_id int(11)不为空auto_increment…

造成mysqldump缓冲池的污染研究

造成mysqldump缓冲池的污染研究

污染,缓冲池,电脑软件,mysqldump,前言:uff1a Oracle的MySQL最近发布在其官方博客上一些5.6变量的默认值的修改,innodb_old_blocks_time默认值是从0到1000取代(1S) 关于这个参数的作用的摘录如下: 在毫秒(ms)多久一块插入老子要搬到新的子列表第…

mysql常见错误代码比较

mysql常见错误代码比较

常见错误,代码,电脑软件,mysql,常见的错误! 1016错误:文件无法打开,使用背景修复或修复使用phpMyAdmin。 1044错误:数据库用户权限不足,请与空间经销商联系解决 1045错误:数据库服务器数据库用户名/数据库名称/数据库密码错误。请与太空商联系,核…