• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL 请选择合适的列

MySQL 请选择合适的列

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了请查看mysql错误日志,mysql 行转列,mysql删除列,mysql增加列,mysql行转列函数等相关知识,希望本文的分享对您有所帮助
思维导图
点击图片,可查看大图。

介绍  </div> 情况:如果你的表结构设计不良或你的索引设计不佳,那么请你优化你的表结构设计和给予合适的索引,这样你的查询性能就能提高几个数量级。——数据越大,索引的价值越能体现出来。</div>  </div> 我们要提高性能,需要考虑的因素:</div> 1、设计架构</div> 2、设计索引</div> 3、评估查询性能</div></div>  

</div> 今天要讲的是表列的设计,暂不谈索引设计。我会在下一章讲索引设计。</div>  </div> 选择数据类型</div>  </div> 选择正确的数据类型,对于提高性能至关重要。</div> ,有利于帮助你选择何种类型。</div>  </div> 1、更小通常更好。</div>   使用最小的数据类型。——更少的磁盘空间,内存和CPU缓存。而且需要的CPU的周期也更少。</div>  </div> 2、简单就好。</div>   整数代价小于字符。——因为字符集和排序规则使字符比较更复杂。</div>   1>mysql内建类型(如timestamp,date)优于使用字符串保存。</div>   2>使用整数保存ip地址。</div>  </div> 3、尽量避免NULL——如果计划对列进行索引,尽量避免把列设置为NULL</div>   尽可能把字段定义为NOT NULL。——可以放置一个默认值,如‘',0,特殊字符串。</div>   原因:</div>     (1)MYSQL难以优化NULL列。NULL列会使索引,索引统计和值更加复杂。</div>     (2)NULL列需要更多的存储空间,还需要在MYSQL内部进行特殊处理。</div>     (3)NULL列加索引,每条记录都需要一个额外的字节,还导致MyISAM中固定大小的索引变成可变大小的索引。</div>  

</div>

决定列的数据类型,我们应该遵循下面两步。

第一步、大致决定数据类型。——判断是数字,字符串还是时间等。这通常很直观。

第二步、确定特定的类型。

  很多数据类型能够保存同类型的数据,但是我们要发现,他们在存储的范围,精度和物理空间之间的差别(磁盘或内存空间)。如:datetime和timestamp能保存同样类型的数据:日期和时间。——timestamp使用datetime一半的空间;能保存时区;拥有特殊的自动更新能力。 

品味数据类型</div>  </div></div></div> 整数</div>  </div> 1、存储类型——数据范围为-2^(n-1)到2^(n-1)-1,这里的n是所需存储空间的位数。</div>      类型名称    占用位数      数据范围    TINYINT     8   -2^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、unsigned属性表示不允许负数,并大致把正上限提高了一倍。如TINYINT UNSIGNED保存的范围为0到255而不是-127到128

 

3、MYSQL对整数类型定义宽度,比如int(1)和int(22)对于存储和计算是一样的。只规定了MYSQL的交互工具(如命令行客户端)用来显示字符的个数。

 

实数</div>  </div> 实数有分数部分(小数部分)。</div> 存储类型:FLOAT和DOUBLE,DECIMAL。</div> 占用大小:FLOAT 4个字节,DOUBLE 8个字节。DECIMAL受到MYSQL版本影响,早期版本254个数字,5.0以上65个数字。</div> 区别:1、FLOAT和DOUBLE支持标准浮点运算进行近似计算。</div>    2、DECIMAL进行DECIMAL运算,CPU并不支持对它进行直接计算。浮点运算会快一点,因为计算直接在CPU上进行。</div>      3、DECIMAL只是一个存储格式,在计算时会被转换为DOUBLE类型。</div>    4、DECIMAL(18,9)使用9个字节,小数点前4个字节,小数点1个字节,小数点后4个字节。</div>    5、DECIMAL只有对小数进行精确计算的时候才使用它,如保存金融数据。</div>  

</div>   字符串类型</div>  </div> 1、varchar</div>   (1)保存可变长字符串。</div>     理解:比固定长度占用更少的存储空间,因为它只占用自己需要的空间。例外情况:使用ROW_FORMAT=FIXED创建的MyISAM表,它为每行使用固定长度的空间,可能会造成浪费。</div>   (2)存储长度信息。如果定义的列小于或等于255,则使用1个字节存储长度值,假设使用latin1字符集,如varchar(10)将占用11个字节的存储空间。反过来,varchar(1000),则占用1002个字节的存储空间。</div>   (3)节约空间,对性能有帮助。</div>   (4)5.0版本以上,无论是取值还是保存,MySQL都会保留字符串末尾的空格。</div>
只分配真正需要的空间
使用varchar(5)和varchar(200)保存'hello'占用空间是一样的。——这里应该指的是磁盘上的空间。
那么使用较短列有何优势?——巨大的优势
  较大的列会使用更多的内存,因为MySQL通常会分配固定大小的内存块(如varchar(200)会用200个字符大小的内存空间)来保存值(然后对值进行trim操作,最后放入磁盘)或取值。——这对排序或使用基于内存的临时表尤其不好。
</div>

</div> 2、char</div>   (1)固定长度。</div>   (2)保存值时,去掉末尾的空格。</div>

             咱们再看看varchar

</div>   (3)char常用于很短字符串或长度近似相同的字符串的时候很有用。如存储用户密码的MD5哈希值,它的长度总是一样的。</div>   char优于varchar的地方?</div>   1>> 对于经常改变的值,char优于varchar,因为固定长度行不容易产生碎片。——当最长长度远大于平均长度,并且很少发生更新的时候,通常适合使用varchar。</div>   2>>对于很短的列,char的效率也是高于varchar的。如对于单字节字符集(如latin1),char(1)只会占用1个字节,而varchar(2)会占用2个字节(有一个字节用来存储长度的信息)。</div>  </div>

</div>  </div>  3、text</div> 用于保存大量数据。</div>   (1)InnoDB在它们较大的时候会使用“外部”存储区域来进行保存。——所以需要足够的外部存储空间来保存实际的值。</div>   (2)排序方式不同于其他字符类型,不会按照完整长度进行排序,而只是按照max_sort_length规定的前若干个字节进行排序。</div>  

<script

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL 请选择合适的列

相关文章

  • 2018-12-05总结10篇索引操作的实例教程
  • 2017-05-11mysql "too many connections" 错误 之 mysql解决方法
  • 2017-05-11命令行模式下备份、还原 MySQL 数据库的语句小结
  • 2018-12-05mysql 日期和时间格式转换实现语句
  • 2018-12-05MySQL5.7数据库详细安装方法和配置步骤(图文)
  • 2018-12-05Mac操作系统下MySQL密码忘记后重置密码的方法_MySQL
  • 2017-05-11mysql触发器实现oracle物化视图示例代码
  • 2018-12-05不能够连接到主机(名称为localhost)上的MySQL服务”
  • 2018-12-05MySQL在linux下最简单的安装方法
  • 2018-12-05使用Innobackupex快速搭建(修复)MySQL主从架构

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 简单有用的SQL脚本 (行列互转,查询一个表内相同纪录等)
    • 基于MySQL Master Slave同步配置的操作详解
    • sql2008 附加数据库时出现错误5123提示的解决方法
    • MySQL 实用命令
    • 关于mysql delete的问题小结
    • MYSQL经典语句大全——技巧篇
    • MySQL下海量数据的迁移步骤分享
    • IMP-00008: unrecognized statement in the export file: string
    • Mysql系列(十)Mysql条件判断
    • mysql双向加密解密方式用法详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有