首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【MySQL】主键优化原理篇——【数据组织方式&主键顺序插入主键乱序插入&页分裂&页分裂】

本章主要内容面向接触过C++ Linux的老铁 主要内容含: 一.主键优化 1.主键设计原则 满足业务需求的情况下, 尽量降低主键的长度。...尽量不要使用UUID做主键或者是其他自然主键,如身份证号 对于一个表。聚集索引有一个,但二级索引有很多,二级索引到叶子节点中挂的就是主键。...插入数据时,尽量选择 顺序插入 ,选择使用AUTOINCREMENT自增主 顺序插入可以减少 页分裂 (可以了解下按下面的数据组织方式) 2.数据组织方式 【1】主键顺序插入 在大多数数据库系统中,如表数据是使用...主键顺序插入 第一个页满了,插入第二个页,一页16k,以此类推 【2】页分裂(主键乱序插入) 下面演示页分裂: 此时两页都满了, 我们要插入id为50的数据 ,他会开辟一个新的数据页,但并不是直接插入到第三个数据页当中...找到第一个 数据页百分之50的位置 ,大于百分之50的部分移动的新开辟的数据页当中 之后插入id为50的数据 插入要进入的50数据时,此时就应该改动链表指针 【3】页合并(主键乱序删除) 当删除一行记录时

6310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    .NET生成MongoDB中的主键ObjectId

    前言   因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键为了返回或者通过主键查询创建的业务,像EF中我们可以生成Guid来,本来想着要不要实现一套MongoDB中ObjectId的,...结果发现网上各种各样的实现都有,不过好在阅读C#MongoDB驱动mongo-csharp-driver代码的时候发现有ObjectId.GenerateNewId()的方法提供,我们可以直接调用即可,...MongoDB ObjectId类型概述  每次插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型的,也可以手动的插入,默认情况下它的数据类型是ObjectId,由于MongoDB...驱动安装 1、直接命令自动安装 Install-Package MongoDB.Driver 2、搜索Nuget手动安装 调用生成主键ObjectId var primarykeyId = ObjectId.GenerateNewId.../MongoDB.Bson/ObjectModel/ObjectId.cs /* Copyright 2010-present MongoDB Inc. * * Licensed under the Apache

    1.4K20

    MongoDB主键:使用ObjectId () 设置_id字段

    MongoDB中的主键是什么? 在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的Object ID 值。...默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段,下图所示: ?...如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在创建集合时明确定义它。 在显式创建id字段时,需要使用名称中的_id创建它。...结果显示表明,我们在创建集合时定义的_id字段现在作为集合的主键。 译者:徐杨 MongoDB中文社区翻译志愿者,资深程序员。

    5.3K20

    MongoDB(7)- 文档插入操作

    ,其中一个文档发生错误,MongoDB 将返回而不处理数组中的其余文档(默认) false:无序插入,其中一个文档发生错误,则继续处理数组中的其他文档 三种 insert 方法的返回内容 // 插入单条文档...MongoDB 向集合里插入记录时,无须事先对数据存储结构进行定义,每个文档的数据结构都可以是不同的 如果待插入的集合不存在,则插入操作会默认创建集合 MongoDB 中,插入操作以单个集合为目标 MongoDB...中的所有写入操作都是单个文档级别的原子操作 插入不指定 _id 字段的文档 db.test.insert( { item : "card", qty : 15 }) MongoDB 会自动给它分配一个...,MongoDB 将会为第二个和第三个文档创建默认 _id 字段 db.test1.find() { "_id" : 11, "item" : "pencil", "qty" : 50, "type"...,MongoDB 会继续将其余文档插入数组中 还有其他插入文档的方法 需要添加 upsert: true 选项 db.collection.update() db.collection.updateOne

    99120

    MyBatis魔法堂:Insert操作详解(返回主键、批量插入

    oracle|mysql等,表示数据库厂家,元素内部可通过``来为特定数据库指定不同的sql语句 三、一般的INSERT操作——返回值为插入的记录数目...name}, #{age})     手段②: // 下面是SQLServer获取最近一次插入记录的主键值的方式...,但不同的是主键值已经赋值到领域模型实体的id中了。...五、 selectKey子元素 详解                               作用:在insert元素和update元素中插入查询语句。  ...并提供给insert语句使用 六、批量插入                                    方式1: <insert id="add" parameterType="EStudent

    7.4K80

    数据插入失败引发的主键auto_increment问题

    数据入库后的主键不是连续自增的,主键键值没过几秒就从两千多直接跳到了五千上下。这是为什么?瞬间引起我的注意。 先简单说明下环境。Mysql版本:5.6.23。...先插入一条数据: INSERT INTO test_innodb (`username`) VALUES('admin'); 执行成功,主键ID为“1”。...,可以看到主键ID为“3”,已经略过了“2”。...当插入数据失败或者回滚事务时,内存中的auto_increment计算器的值却不会回滚。 举一反三 Innodb存储引擎会引起此问题,那MyISAM存储引擎呢?...innodb-auto-increment-handling.html 本站文章除注明转载外,均为本站原创 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动 转载请注明:文章转载自:Marser [https://www.marser.cn] 本文标题:数据插入失败引发的主键

    2.4K30

    【MyBatis框架点滴】——mybatis插入数据返回主键(mysql、oracle)

    主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A、B中插入数据(A的主键是B的外键),向A表中插入数据之后,向B表中插入数据时需要用到A的主键。...id }   这里总结一下mybatis插入数据时返回主键的4种情况:mysql环境下主键自增、mysql环境下主键为uuid、mysql环境下主键自增、mysql环境下主键为uuid。   ...数据库为mysql ---- 主键为自增时(主键为数值类型且自增)   利用mysql的LAST_INSERT_ID()方法获取插入记录的主键,select LAST_INSERT_ID()可以在插入数据后...,查询并返回刚插入数据的主键(但是单独执行这条语句只会返回0)。...主键为UUID时(主键必须为字符类型)   使用mysql的方法UUID()方法获取随机的UUID作为主键,select UUID()可以在插入数据前,生成随机的UUID并通过keyProperty赋值给将要插入记录的主键

    2K20
    领券