当前位置:网站首页 > SQL数据库编程 > 正文

Sqlldr命令 项目最大长度(oracle sql 最大长度)



首先innodb采用B+树作为索引树,只有叶子节点存放表的数据,这个大家都知道, 整张表的结构如下图所示
在这里插入图片描述
上面每个数据页的大小都为16K, 非叶子节点的每条数据都指向新的数据页,而新的数据页有两种可能,

  • 如果是叶子节点,那么里面就是一行行的数据
  • 如果是非叶子节点的话,那么就会继续指向新的页
    假设
    整张表的记录数量是Total

  • 非叶子节点内指向其他页的数量为 x
  • 叶子节点内能容纳的数据行数为 y
  • B+ 数的层数为 z
    如下图中所示
    Total =x^(z-1) *y 也就是说总数会等于 x 的 z-1 次方 与 Y 的乘积
    在这里插入图片描述
    简单举个例子,假如这里非叶子节点的数据页指向其他页的数量是2,
    整个树只有2层 就像上图所示,
    x=2, y=2,z=2
    那么 Total = 2 * 2 = 4
    但是 一个数据页可是有16K呀,怎么可能只存放2条数据呢(非叶子不是数据,是指向下一页的数据)
    影响一张表的记录数量的因素取决于上面三个因素,那么我们现在来看每个因素的取值范围大概是怎么样的。








对于x :
每个数据页的结构,索引也也不例外,都会有 File Header (38 byte)、Page Header (56 Byte)、Infimum + Supermum(26 byte)、File Trailer(8byte), 再加上页目录,大概 1k 左右,我们就当做它就是 1K, 那整个页的大小是 16K, 剩下 15k 用于存数据,在索引页中主要记录的是主键与页号,主键我们假设是 Bigint (8 byte), 而页号也是固定的(4Byte), 那么索引页中的一条数据也就是 12byte; 所以 x=151024/12≈1280 行*
在这里插入图片描述
对于y:
叶子节点和非叶子节点的结构是一样的,同理,能放数据的空间也是 15k(16-1=15);但是叶子节点中存放的是真正的行数据,这个影响的因素就会多很多,比如,字段的类型,字段的数量;每行数据占用空间越大,页中所放的行数量就会越少;这边我们暂时按一条行数据 1k 来算,那一页就能存下 15 条,Y≈15



算到这边了,是不是心里已经有谱了啊
根据上述的公式,Total =x^(z-1) y,已知 x=1280,y=15
假设 B+ 树是两层,那就是 Z =2, Total = (1280 ^1 )15 = 19200
假设 B+ 树是三层,那就是 Z =3, Total = (1280 ^2) *15 = (约 2.45kw)
如果是 4 层,除了查询的时候磁盘 IO 次数会增加,而且这个 Total 值会是多少,大概应该是 3 百多亿吧,也不太合理,所以,3 层应该是比较合理的一个值。
我们刚刚在说 Y 的值时候假设的是 1K ,那比如我实际当行的数据占用空间不是 1K , 而是 5K, 那么单个数据页最多只能放下 3 条数据
同样,还是按照 Z=3 的值来计算,那 Total = (1280 ^2) *3 = (近 500w)





所以,在保持相同的层级(相似查询性能)的情况下,在行数据大小不同的情况下,其实这个最大建议值也是不同的,而且影响查询性能的还有很多其他因素,比如,数据库版本,服务器配置,sql 的编写等等,MySQL 为了提高性能,会将表的索引装载到内存中。在 InnoDB buffer size 足够的情况下,其能完成全加载进内存,查询不会有问题。但是,当单表数据库到达某个量级的上限时,导致内存无法存储其索引,使得之后的 SQL 查询会产生磁盘 IO,从而导致性能下降,所以增加硬件配置(比如把内存当磁盘使),可能会带来立竿见影的性能提升哈。

到此这篇Sqlldr命令 项目最大长度(oracle sql 最大长度)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • sqlfor循环(sql的foreach循环)2025-10-04 16:09:09
  • sqlyog打开sql文件(怎样打开sql文件)2025-10-04 16:09:09
  • sql循环函数(sql里面循环)2025-10-04 16:09:09
  • plsql10注册码(plsql 14 注册码)2025-10-04 16:09:09
  • 增删改查sql语句关键字(sql的增删查改语句)2025-10-04 16:09:09
  • sql文件怎么导入mysql(sql文件怎么导入mysql数据库)2025-10-04 16:09:09
  • sqlldr字段长度超过255(sql字段长度大于3的值)2025-10-04 16:09:09
  • mysql设置主键语句(mysql设置主键语句自增)2025-10-04 16:09:09
  • Pymysql查询返回的结果(pymysql查询mysql输出成字典)2025-10-04 16:09:09
  • sql中循环查询(sql循环查询语句)2025-10-04 16:09:09
  • 全屏图片