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

在SQL 中删除聚簇主键时会发生什么

在 SQL 中删除聚簇主键时,会发生以下情况:

  1. 删除聚簇主键后,表将不再具有主键。这意味着表中的数据将不再按照任何特定顺序进行排序。
  2. 如果表中存在外键约束,则删除聚簇主键可能会导致外键约束失效。
  3. 删除聚簇主键可能会导致性能问题,因为数据库引擎将无法使用聚簇索引来高效地查找和排序数据。
  4. 删除聚簇主键可能会导致数据库占用更多的存储空间,因为数据库引擎可能需要创建新的非聚簇索引来支持查询操作。

为了避免这些问题,建议在删除聚簇主键之前,先考虑是否有其他替代方案可以满足业务需求。如果确实需要删除聚簇主键,则应该在删除之前进行充分的测试和备份,以确保数据的完整性和可用性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【DB笔试面试563】Oracle什么因子(Clustering Factor)?

♣ 题目部分 Oracle什么因子(Clustering Factor)?...索引,数据是按照一定的顺序排列起来的。...Oracle数据库因子是指按照索引键值排序的索引行和存储于对应表数据行的存储顺序的相似程度,也就是说,表数据的存储顺序和某些索引字段顺序的符合程度。...Oracle数据库,能够降低目标索引的因子的唯一方法就是对表数据按照目标索引的索引键值排序后重新存储。需要注意的是,这种方法可能会同时增加该表上存在的其它索引的因子的值。...下边的SQL是查询索引的相关信息,通过视图DBA_INDEXES、DBA_OBJECTS和DBA_TABLES关联得到,可以查询当前索引的大小、行数、创建日期、索引高度和因子等信息。

57530

MySQL 加锁处理分析

Cluster Index:索引 InnoDB存储引擎的数据组织方式,是索引表:完整的记录,存储主键索引,通过主键索引,就可以获取记录所有的列。...列,回主键索引(索引),然后将索引上的name = ‘d’ 对应的主键索引项加X锁。...为什么索引上的记录也要加锁?...由于id列上没有索引,因此只能走索引,进行全部扫描。从图中可以看到,满足删除条件的记录有两条,但是,索引上所有的记录,都被加上了X锁。无论记录是否满足条件,全部被加上X锁。...结论:Repeatable Read隔离级别下,如果进行全表扫描的当前读,那么会锁上表的所有记录,同时会锁上索引内的所有GAP,杜绝所有的并发 更新/删除/插入 操作。

3.5K61
  • TiDB 5.0 RC Release Notes

    SQL 支持索引(实验特性) 开启索引功能后,TiDB 性能在以下条件下会有较大幅度的提升, 例如: TPC-C tpmC 的性能提升了 39%。...索引主要在以下条件时会有性能提升: 插入数据时会减少一次从网络写入索引数据。 等值条件查询仅涉及主键时会减少一次从网络读取数据。 范围条件查询仅涉及主键时会减少多次从网络读取数据。...-等值或范围条件查询涉及主键的前缀时会减少多次从网络读取数据。 索引定义了数据的物理存储顺序,表的数据只能按照索引的定义进行排序,每个表只能有一个索引。...如果主键是单列整数类型或者表没有主键,系统会按照原有的方式进行数据排序,不受索引的影响。...,由于“添加”和“删除”成员操作分成两步,如果此时有故障发生会引起 Region 不可用并且会返回前端业务的错误信息。

    1.1K00

    深入浅出 MySQL 索引(一)

    从 功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以分为 2 种:索引和非索引。...索引(主键索引)特点 主键作为索引,B+树的 叶子节点 存储的是完整的用户记录 非索引(二级索引、辅助索引)特点 回表查询:先到普通索引上定位主键值,再到聚集索引上定位行记录,它的性能较扫一遍索引树低...根据索引树按照条件找到了需要的数据,仅仅是索引里的几个字段的值和主键值,如果用 select * 则还需要很多其他的字段,就得走一个回表操作,根据主键再到主键索引里去找,索引的叶子节点是数据页...八、创建不同的索引体会加速查询 创建索引体会加速查询 我们之前创建 student 表的同时添加了以 id 为索引字段的主键索引(索引),所以看下使用主键 id 来查询的速度怎么样。...然后我们把主键索引删除之后,再看下查询用时。 先删除主键索引: ALTER TABLE `test`.

    65920

    2020最新版MySQL数据库面试题(一)

    InnoDB索引是索引,MyISAM索引是非索引。 InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。...B+树满足索引和覆盖索引的时候不需要回表查询数据, B+树的索引,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是索引和非索引。...InnoDB,只有主键索引是索引,如果没有主键,则挑选一个唯一键建立索引。如果没有唯一键,则隐式的生成一个键来建立索引。...当查询使用索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询。 什么索引?...索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非索引都是辅助索引,像复合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值 何时使用索引与非索引

    1.1K60

    史上最全!Mysql 索引知识详解

    一、背景 分享这篇文章的目的:提升开发、DBA、QA项目过程关于提测 sqlsql 变更关于添加、修改、删除索引合理性的分析能力; 二、Mysql索引 1.概念说明 简单来说,索引的出现其实就是为了提高数据查询的效率...InnoDB,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,且数据都是存储B+树的。 为什么使用的是B+树,而不是其他的数据索引模型呢? (1)....索引分类 (1).索引 主键索引 Innodb,Mysql的数据是按照主键的顺序来存放的。那么索引就是按照每张表的主键来构造一颗B+树,叶子节点存放的就是整张表的行数据。...由于表里的数据只能按照一颗B+树排序,因此一张表只能有一个索引。 Innodb索引默认就是主键索引。...项目代码 code diff 时会发现常用的业务查询 sql,根据 where 条件来判断频繁查询字段,再根据本文分享的索引知识,来判断sql审核关于索引相关的操作是否合理且有效。 2.

    1.2K40

    完蛋!😱 我被MySQL索引失效包围了!

    知其然更要知其所以然,一起来看看索引为啥失效了吧~ 阅读文本前,需要知道索引、二级索引、回表等知识,如果同学不太了解可以去查看往期文章~ 什么是索引失效呢?...对于MySQL常使用的索引来说,往往是索引和二级索引 索引失效指的是某些场景下,MySQL不使用二级索引,而去使用索引(全表扫描),从而导致二级索引失效 (索引失效的索引指的是二级索引)...不够熟悉索引导致使用不当 索引使用不当往往是因为我们不够了解索引 索引,记录按照主键值升序排序 二级索引,记录按照索引列、主键的顺序升序排序,当索引列相等时主键才有序 (age,student_name...= b.b2 比如在这个SQLb为被驱动表,为关联条件需要的b2建立索引可以加快查询 正常情况下会使用索引(上图) 但是同样的SQL,你知道什么情况下会变成下图这样吗?...使用二级索引时往往是需要回表导致成本大 因为回表不止需要多查询一个索引,由于二级索引的主键值可能无序查询索引时还会导致随机IO 回表成本大的场景一般发生在查询数据量较大的情况下,因为回表的数据增多成本也就变大

    21221

    2020最新版MySQL数据库面试题(一)

    InnoDB索引是索引,MyISAM索引是非索引。 InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。...B+树满足索引和覆盖索引的时候不需要回表查询数据, B+树的索引,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是索引和非索引。...InnoDB,只有主键索引是索引,如果没有主键,则挑选一个唯一键建立索引。如果没有唯一键,则隐式的生成一个键来建立索引。...当查询使用索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询。 什么索引?...索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非索引都是辅助索引,像复合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值 何时使用索引与非索引

    48610

    企业面试题|最常问的MySQL面试题集合(一)

    DELETE命令从一个表删除某一行,或多行,TRUNCATE命令永久地从表删除每一行。 问题3:什么是触发器,MySQL中都有哪些触发器? 触发器是指一段代码,当触发某个事件时,自动执行这些代码。...MySQL索引的原理 MySQL索引是用一种叫做索引的数据结构实现的,下面我们就来看一下什么索引。...索引是一种数据存储方式,它实际上是同一个结构中保存了B+树索引和数据行,InnoDB表是按照索引组织的(类似于Oracle的索引组织表)。...InnoDB通过主键数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义个主键作为索引。...InnoDB索引是索引,MyISAM索引是非索引。 InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。

    69132

    MySQL索引知识结构

    索引是什么关系数据库,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表物理标识这些值的数据页的逻辑指针清单。...物理存储分类MySQL索引按叶子节点存储(物理存储)的是否为完整表数据分为:索引、二级索引(辅助索引)索引:叶子节点存放的是一行完整的用户记录,叶子节点间按主键id递增二级索引:子节点存放的是主键值...,而不是实际数据其实上图中画的B+树就是索引的B+树,这里我们再看二级索引的B+树,如下图:通过和上图索引的B+树对比,我们可以清楚的看到,索引的叶子节点存放的是数据data,而二级索引叶子节点存放的是主键...5:主键索引最好是自增的InnoDB 创建主键索引默认为索引,数据存储叶子节点上,叶子节点中的记录都是按照主键值从小到大的顺序排序的,如果主键值是随机的,插入新数据时可能插入到某个数据页中间位置,...MySQL的 InnoDB存储引擎主键索引是索引,主键索引的B+树的叶子节点按照顺序存储了主键值及数据,如果主键索引是自增ID,只需要按顺序往后排列即可,因为每次插入一条新记录,都是追加操作,

    69721

    MySQL数据库知识点

    数据库为什么使用B+树而不是B树 B+树满足索引和覆盖索引的时候不需要回表查询数据, 什么索引?何时使用索引与非索引 非索引一定会回表查询吗? 联合索引是什么?...B+树满足索引和覆盖索引的时候不需要回表查询数据 B+树的索引,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是索引和非索引。...InnoDB,只有主键索引是索引,如果没有主键,则挑选一个唯一键建立索引。如果没有唯一键,则隐式的生成一个键来建立索引。...索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非索引都是辅助索引,像复合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值 何时使用索引与非索引...因为InnoDB存储引擎主键索引是作为索引存在的,也就是说,主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),如果主键索引是自增ID,那么只需要不断向后排列即可,如果是UUID

    76820

    www.xttblog.com MySQL InnoDB 索引原理

    索引和二级索引 3.1 索引 每个InnoDB的表都拥有一个索引,称之为索引,此索引存储着行记录,一般来说,索引是根据主键生成的。...索引按照如下规则创建: 当定义了主键后,InnoDB会利用主键来生成其索引; 如果没有主键,InnoDB会选择一个非空的唯一索引来创建索引; 如果这也没有,InnoDB会隐式的创建一个自增的列来作为索引...一张表可以存在多个辅助索引,但是只能有一个索引,通过辅助索引来查找对应的航记录的话,需要进行两步,第一步通过辅助索引来确定对应的主键,第二步通过相应的主键索引查询到对应的行记录,也就是进行两次...自增主键的弊端 对于高并发的场景,InnoDB按照主键的顺序插入可能会造成明显的争用,主键的上界会成为“热点”,因为所有的插入都发生在此处,索引并发的插入可能会造成间隙锁竞争,何为间隙锁竞争,下个会详细介绍...id,然后利用这些主键id再去索引中去查询,然后得到所有记录,利用主键id索引查询记录的过程是无序的,磁盘上就变成了离散读取的操作,假如当读取的记录很多时(一般是整个表的20%左右),这个时候优化器会选择直接使用索引

    1.1K50

    MySQL索引详解

    为了减少 Hash 冲突的发生,一个好的哈希函数应该“均匀地”将数据分布整个可能的哈希值集合。...按照底层存储方式角度划分:索引(聚集索引):索引结构和数据一起存放的索引,InnoDB 主键索引就属于索引。...非索引(非聚集索引):索引结构和数据分开存放的索引,二级索引(辅助索引)就属于非索引。MySQL 的 MyISAM 引擎,不管主键还是非主键,使用的都是非索引。...InnoDB 主键索引就属于索引。...当查到索引对应的指针或主键后,可能还需要根据指针或主键再到数据文件或表查询。这是 MySQL 的表的文件截图:索引和非索引:非索引一定回表查询吗(覆盖索引)?非索引不一定回表查询。

    12520

    索引与非索引(也叫二级索引)--最清楚的一篇讲解

    ,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因 澄清一个概念:innodb索引之上创建的索引称之为辅助索引...如果没有这样的索引,InnoDB 会隐式定义一个主键来作为索引。InnoDB 只聚集同一个页面的记录。包含相邻键值的页面可能相距甚远。...如果你已经设置了主键索引,必须先删除主键,然后添加我们想要的索引,最后恢复设置主键即可。 此时其他索引只能被定义为非索引。这个是最大的误区。...一般要根据这个表最常用的SQL查询方式来进行选择,某个字段作为索引,或组合索引,这个要看实际情况。 记住我们的最终目的就是相同结果集情况下,尽可能减少逻辑IO。 结合图再仔细点看 ?...也就是说行的位置(实现通过16K的Page来定位)会随着数据库里数据的修改而发生变化(前面的B+树节点分裂以及Page的分裂),使用索引就可以保证不管这个主键B+树的节点如何变化,辅助索引树都不受影响

    59.4K1718

    mysql索引及执行计划

    按物理存储分类可分为:索引、二级索引(辅助索引)。 按字段特性分类可分为:主键索引、普通索引、前缀索引。 按字段个数分类可分为:单列索引、联合索引(复合索引、组合索引)。...BTREE查找算法演变 B-TREE 普通BTREE B+TREE 叶子节点双向指针 B++TREE 枝节点的双向指针 mysql如何使用BTREE b树分三层 索引构建过程 leaf 叶子 存储数据行时就是有序的...(exent 区)索引 extent区 : 连续的64的数据页 默认1m IOT组织表 : 会按照索引组织方式,存储表的数据行 索引是建表时的 主键列 如果没有主键是第一个非空的唯一键 如果这两个都没有...会生成一个隐藏的索引(row id)占用6字节 secondary 辅助索引 普通单列索引 普通联合索引 唯一索引 前缀索引 辅助索引 非索引之外的都称之为‘’辅助索引‘’ 每一列辅助索引包含两列...回表是什么 回表带来什么问题 怎么减少回表 1,按照辅助索引列,作为条件查询时,先查找付索引树得到id,回到索引树查找数据行信息 2 io量多,io次数多,sql层和engine交互多次 io

    1.3K31

    03-面试必会-Mysql篇

    唯一索引:索引列的值必须是唯一的,但是允许为空值 主键索引:是一种特殊的唯一索引,不允许有空值 全文索引: 只有 MyISAM 引擎、InnoDB(5.6 以后)上才能使⽤用,而且只能在...什么索引什么是非索引 ?...索引 使用InnoDB存储引擎的时候, 主键索引 B+树叶子节点会存储数据行记录,简单来说数据和索引在一起存储 , 这就是索引 非索引 使用MyISAM存储引擎的时候, B+树叶子节点只会存储数据行的指针...,简单来说数据和索引不在一起 , 这就是非索引 10.... mysql 建立联合索引时会遵循左前缀匹配的原则,即最左优先,检索数据时从联合索引的最左边开始匹配,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到 ; 例如 : create index

    24610

    【MySQL 系列】MySQL 索引篇

    4、MySQL 索引 4.1、什么索引 索引:将数据存储与索引放到了一块,找到索引也就找到了数据 ; InnoDB 里的 B+ 树的每个节点都是一个数据页,结构示意图如下: 以上图为例子...4.2、索引列的选择 因为表的数据都是存放在索引的叶子节点里,所以 InnoDB 存储引擎一定会为表创建一个索引,且由于数据物理上只会保存一份,所以索引只能有一个。...InnoDB 创建索引时,会根据不同的场景选择不同的列作为索引: 如果有主键,默认会使用主键作为索引的索引键; 如果没有主键,就选择第一个不包含 NULL 值的唯一列作为索引的索引键; 在上面两个都没有的情况下...,InnoDB 将自动生成一个隐式自增 id 列作为索引的索引键; 4.2、非索引和二级索引 一张表只能有一个索引,那为了实现非主键字段的快速搜索,就引出了二级索引(非索引/辅助索引),...二级索引的 B+ 树如下图,数据部分为主键值: 因此,如果某个查询语句使用了二级索引,但是查询的数据不是主键值,这时二级索引找到主键值后,需要去索引获得数据行,这个过程就叫作「回表」,也就是说要查两个

    19810

    数据库创建索引的条件和注意事项

    数据库创建索引是为了提升查询性能,但是建立索引也会降低修改性能。 为什么不对表的每一列都创建一个索引呢?...如果建立索引,那么需要的空间就会更大;如果非索引很多,一但索引改变,那么所有非索引也会跟这变; 当对表的数据进行增加、删除和修改的视乎,索引也要动态的维护,一旦一个数据改变,并且改变的列比较多...索引创建的过程SQL Server临时使用当前数据库的磁盘空间,当创建索引时,需要1.2倍的表空间大小。因此,需要保证有足够的磁盘空间用于创建索引。...主键约束是一种保持数据完整性的逻辑,它限制表的记录有相同的主键记录。创建主键约束时,系统会自动创建一个唯一性的索引。...逻辑上,主键约束是一种重要的结构;但在物理结构上,与主键约束相对应的结构是唯一性的索引。换句话说,物理实现上其实不存在主键约束,只存在唯一性的索引。

    2.7K20

    MySQL InnoDB 加锁机制

    100的记录, 然后会话B也插入主键为100的记录, 会话C也插入主键为100的记录, 这时会话B/C提示主键冲突, 插入失败, 然而会话B/C仍会对主键100的记录持有索引记录读锁S,REC_NOT_GAP...什么SQL使用什么类型的锁 tips: 分析加什么锁之前要查看执行计划, 数据量过少时, mysql可能不使用索引而直接走全表扫描....transaction; select * from user where value = 30 for update; (17, 42)间的间隙被锁, 应该没什么疑问 总结下, 对于使用普通非索引的等值查询...9.使用索引的等值查询 索引指主键 a) 值存在 BEGIN; SELECT * FROM user WHERE id = 514 FOR UPDATE; 主键记录加锁. b) 值不存在 BEGIN...11.使用联合索引的等值查询 加锁与非联合唯一索引一致 12.使用联合索引的范围查询 与非唯一索引范围查询加锁有一点不同, 那就是主键的范围查询不会进行多余加锁 13.混合使用多个索引的查询

    3K00

    面试系列-避免死锁

    我们可以 information_schema 数据库查询到具体的死锁情况,如下图所示: 看到这,你可能会想,为什么 SELECT 要加 for update 排他锁,而不是使用共享锁呢?...只要系统发生死锁,这些条件必然成立。所以一些经常需要使用互斥共用一些资源,且有可能循环等待的业务场景,要特别注意死锁问题。 接下来,我们再来了解一个出现死锁的场景。...我们讲过,InnoDB 存储引擎的主键索引为索引,其它索引为辅助索引。如果使用辅助索引来更新数据库,就需要使用索引来更新数据库字段。...我们还是以上面的这个订单记录表来重现下索引和辅助索引更新时,循环等待锁资源导致的死锁问题: 出现死锁的步骤: 综上可知,更新操作时,我们应该尽量使用主键来更新表字段,这样可以有效避免一些不必要的死锁发生...例如,以上我例举的两种发生死锁的场景,一个考验的是我们对锁算法的了解,另外一个考验则是我们对索引和辅助索引的熟悉程度。

    48610
    领券