MySQL text和varchar区别「建议收藏」

MySQL text和varchar区别「建议收藏」
从存储上讲: – text 是要要进overflow存储。 也是对于text字段,不会和行数据存在一起。但原则上不会全部overflow , 会有768字节…

	MySQL text和varchar区别[数据库教程]

从存储上讲:

  1.  
    – text 是要要进
    overflow存储。 也是对于text字段,不会和行数据存在一起。但原则上不会全部overflow ,

  2.  
    会有768字节和原始的行存储在一块,多于768的行会存在和行相同的Page或是其它Page上。

  3.  
     
  4.  
    – varchar 在MySQL内部属于从blob发展出来的一个结构,在早期版本中innobase中,也是768字节以后进行overfolw存储。

  5.  
     
  6.  
    – 对于Innodb-plugin后: 对于变长字段处理都是20Byte后进行
    overflow存储

  7.  
    (在新的row_format下:dynimic compress)

说完存储后,说一下使用这些大的变长字段的缺点:

  1.  
    – 在Innobase中,变长字段,是尽可能的存储到一个Page里,这样,如果使用到这些大的变长字段,会造成一个Page里能容纳的行

  2.  
    数很少,在查询时,虽然没查询这些大的字段,但也会加载到innodb buffer pool中,等于浪费的内存。

  3.  
    (buffer pool 的缓存是按page为单位)(不在一个page了会增加随机的IO)

  4.  
     
  5.  
    – 在innodb-plugin中为了减少这种大的变长字段对内存的浪费,引入了大于20个字节的,都进行overflow存储,

  6.  
    而且希望不要存到相同的page中,为了增加一个page里能存储更多的行,提高buffer pool的利用率。 这也要求我们,

  7.  
    如果不是特别需要就不要读取那些变长的字段。

那问题来了? 为什么varchar(255+)存储上和text很相似了,但为什么还要有varchar, mediumtext, text这些类型?
(从存储上来讲大于255的varchar可以说是转换成了text.这也是为什么varchar大于65535了会转成mediumtext)

我理解:这块是一方面的兼容,另一方面在非空的默认值上varchar和text有区别。从整体上看功能上还是差别的。

这里还涉及到字段额外开销的:

  1.  
    – varchar 小于
    255byte 1byte overhead

  2.  
    – varchar 大于
    255byte 2byte overhead

  3.  
     
  4.  
    – tinytext
    0-255 1 byte overhead

  5.  
    – text
    0-65535 byte 2 byte overhead

  6.  
    – mediumtext
    0-16M 3 byte overhead

  7.  
     
  8.  
    – longtext
    0-4Gb 4byte overhead

备注 overhead是指需要几个字节用于记录该字段的实际长度。

从处理形态上来讲varchar 大于768字节后,实质上存储和text差别不是太大了。 基本认为是一样的。
另外从8000byte这个点说明一下: 对于varcahr, text如果行不超过8000byte(大约的数,innodb data page的一半) ,overflow不会存到别的page中。基于上面的特性可以总结为text只是一个MySQL扩展出来的特殊语法有兼容的感觉。

默认值问题:

  1.  
    – 对于text字段,MySQL不允许有默认值。

  2.  
    – varchar允许有默认值

总结:

    1.  
      根据存储的实现: 可以考虑用
      varchar替代tinytext

    2.  
      如果需要非空的默认值,就必须使用
      varchar

    3.  
      如果存储的数据大于
      64K,就必须使用到mediumtext , longtext

    4.  
      varchar(255+)和text在存储机制是一样的

    5.  
       
    6.  
      需要特别注意
      varchar(255)不只是255byte ,实质上有可能占用的更多。

    7.  
       
    8.  
      特别注意,
      varchar大字段一样的会降低性能,所以在设计中还是一个原则大字段要拆出去,主表还是要尽量的瘦小

MySQL text和varchar区别

原文地址:https://www.cnblogs.com/lovezhr/p/14944523.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6071.html

(0)
上一篇 2023-04-18
下一篇 2023-04-18

相关推荐

  • 使用Python同时遍历两个列表,生成标题

    使用Python同时遍历两个列表,生成标题Python作为一种高级编程语言,有着广泛的应用场景。Python中提供了很多高效的方法来处理列表,而同时遍历两个列表,则是这些方法中常用的一种。在本文中,我们将介绍如何使用Python同时遍历两个列表,并生成对应的标题。

    2024-08-21
    27
  • 以Python为中心的条件

    以Python为中心的条件Python是一种高级编程语言,它拥有强大的功能和简单易用的语法,正因如此Python成为了许多数据科学家和软件开发人员的首选语言。在今天的信息时代,越来越多的企业开始意识到Python为公司发展带来的影响力,然而,成功追踪趋势和发展Python的应用显然并不是件容易的事情。在这篇文章中,我们将从多个方面对以Python为中心的条件进行详细阐述,并以此探讨Python的优缺点和适用场景。

    2024-04-22
    71
  • 使用brew安装Python3指南

    使用brew安装Python3指南Python是一门非常受欢迎的编程语言,可以用于开发Web应用程序、科学计算、数据分析以及人工智能等多个领域。如果你还没有安装Python3,本文将介绍如何使用Homebrew在macOS上安装Python3。

    2024-05-21
    68
  • oracle查询、修改、删除、插入语句「建议收藏」

    oracle查询、修改、删除、插入语句「建议收藏」表结构如下 create table test ( id int, xm varchar2(5), age varchar2(3) ) 内有数据格式 id xm age 1 张三 14 2 李四 2…

    2023-03-18
    152
  • 数据库中间件DBLE学习(二) 学习配置schema.xml「建议收藏」

    数据库中间件DBLE学习(二) 学习配置schema.xml「建议收藏」前言 一边有一个经常引诱我让我“娱乐至死”的视频,还有一个不停“鞭策“我让我快点学习的大BOSS。正是有这两种 才让我常常在自信中明白自己努力的方向。嗯,"人间不值得"! SCHE

    2022-12-29
    181
  • MySql 库/表级操作 及 数据类型 – 纪宇「建议收藏」

    MySql 库/表级操作 及 数据类型 – 纪宇「建议收藏」数据库分类 关系型数据库(SQL):存储方式固定,安全 非关系型数据库(NoSQL):存储方式比较灵活,存储数据的效率比较高,不太安全 MySQL是一种关系型数据库管理系统(采用关系模型来组织管理数据

    2022-12-19
    153
  • 用c语言编写一个简单的小游戏_c语言画圆最简代码

    用c语言编写一个简单的小游戏_c语言画圆最简代码《见缝插圆》顾名思义,就是在我们绘制的C语言窗口里面画随机圆,圆与圆之间不能相交或相切,那就要自己找“缝隙”咯!

    2022-12-14
    169
  • DBA入职指南学习笔记2

    DBA入职指南学习笔记21、创建用户 create user ecology identified by nskfoa; 2、用户授权 grant connect to ecology; 连接权限 3、授权表权限 gran…

    2023-03-26
    149

发表回复

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