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

MySQL面试遇到这三个问题,直接问懵了!

删除后重启MySQL 如果我们在删除记录后重启MySQL服务器,会发生什么呢?...但是,由于我们刚刚插入了一条记录,其id为11,所以重启后,MySQL会认为当前最大的id是11,因此下一条插入的记录的id将是12。...删除记录后重启MySQL再插入:MySQL会基于重启前已存在的最大id(包括删除的和未删除的)加1来分配新的id。 索引的优缺点是什么? 一、索引的优点 加速查询 索引可以显著加快数据检索的速度。...维护成本 索引的维护需要额外的开销。当表中的数据发生变化(如插入、更新或删除操作)时,数据库需要更新相关的索引。这可能会增加数据库操作的复杂性,并降低数据修改的速度。...不关注索引的使用情况 创建索引后,很多开发者就认为万事大吉了。然而,索引的使用情况是需要定期监控和分析的。如果某个索引长时间未被使用,或者其使用效率很低,那么就需要考虑是否要删除或优化该索引。

7610

一篇文章彻底搞懂Mysql事务相关原理

今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题: 事务想要做到什么效果? 按我理解,无非是要做到可靠性以及并发处理。...(这不包括搜索条件仅包含多列唯一索引的某些列的情况;在这种情况下,会发生间隙锁定。)...; 如果id未建立索引或索引不唯一,则该语句会锁定前面的间隙。...多版本索引和二级索引 InnoDB多版本并发控制(MVCC)对二级索引的处理与对聚簇索引的处理不同。聚簇索引中的记录将就地更新,其隐藏的系统列指向撤消日志条目,可从中重建记录的早期版本。...与聚簇索引记录不同,辅助索引记录不包含隐藏的系统列,也不会就地更新。 更新二级索引列时,将对旧的二级索引记录进行删除标记,插入新记录,并最终清除带有删除标记的记录。

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

    吐血总结——90%程序员面试都用得上的索引优化手册

    所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。 所有的非终端结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。...),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位置;如果发生Hash碰撞(两个不同关键字的Hash值相同),则在对应Hash键下以链表形式存储。...所以,在我们删除数据库百万级别数据的时候,查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的。...与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了。...读者福利: 分享免费学习资料 针对于Java程序员,我这边准备免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、MyBatis,Netty,Redis,Kafka,Mysql

    53600

    Online DDL和Cardinality

    : 列以什么方式存储在索引中,可以是A或者NULL,B+树索引总是A,即排序的,如果使用了Heap存储引擎,并建立了Hash索引,这里就会显示NULL了,因为Hash根据Hash桶存放索引数据,而不是对数据进行排序...如果存储引擎不支持SHARE模式,会返回一个错误信息。 EXCLUSIVE: 在EXCLUSIVE模式下,执行索引创建或删除操作时,对目标表加上一个X锁。...---- Cardinality 什么是Cardinality 我们先思考一个问题,对于什么列添加索引能够获得最大收益,对什么列添加索引是没有意义的。...索引用来精确,快速定位某个数据,但是如果某列数据的重复度很高,例如: 性别,那么对于性别列加索引其实意义不大,相反,如果某列数据的重复度很低,则此时使用B+树索引是最适合的。...此外需要考虑到的是,在生产环境中,索引的更新操作可能是非常频繁的。如果每次索引在发生操作时就对其进行Cardinality的统计,那么将会给数据库带来很大的负担。

    50130

    《逆袭进大厂》第十一弹之MySQL25问25答

    /函数将被保留,但其状态会变为:invalid。...TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。...50修改为100,但是我还没有提交修改,另一个事务看到这个修改,而这个时候原事务发生了回滚,这时候A还是50,但是另一个事务看到的A是100.可能会导致脏读、幻读或不可重复读 提交读,对于一个事务从开始直到提交之前...不宜:1)对于查询中很少涉及的列或者重复值比较多的列 2)对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。 24、覆盖索引是什么?...覆盖索引就是把要查询出的列和索引是对应的,不做回表操作! 25、数据库中的主键、超键、候选键、外键是什么?

    48420

    为什么Apache Doris适合做大数据的复杂计算,MySQL不适合?

    三、数据结构差异 通常而言,数据库中索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。基于不同数据结构的选择,实现各种数据快速检索。...前缀索引、Ordinal 索引和 Zone Map 索引不需要用户干预,会随着数据写入智能生成;Bitmap 索引、 Bloom Filter 索引和倒排索引需要用户干预,数据写入时默认不会生成,用户可以有选择地为指定的列添加这...B+树节点存储的是索引,叶子节点是真正数据存储的地方,叶子节点用了链表连接起来,这个链表本身就是有序的,因此具有高效的范围查询,且能够支持快速的插入、删除、高并发访问等优点,但为什么不适合大数据的复杂计算场景...索引维护成本增加:对于海量数据集,B+树索引的维护成本也会逐渐增加,例如插入、删除或者更新操作会导致索引的重构,从而影响数据处理的效率。...节点分裂频繁:在B+树索引中,节点分裂的次数与数据的分布情况有关。如果数据分布不均匀,节点分裂的频率就会增加,从而导致索引的重构和磁盘I/O负载增加。

    8300

    mysql数据库面试题目及答案_java面试数据库常见问题

    优缺点 MySQL 索引使用的注意事项 SQL怎么优化 数据库悲观锁和乐观锁的原理和应用场景? 如何做 MySQL 的性能优化? 索引是什么?MySQL为什么使用B+树,而不是使用其他?...因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有) 1)如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键 2)如果不存在这种列...索引不会包含有NULL值的列 当查询条件左右两侧类型不匹配的时候会发生隐式转换,隐式转换带来的影响就是可能导致索引失效而进行全表扫描。...索引是什么?MySQL为什么使用B+树,而不是使用其他?B+树的特点 索引是帮助MySQL高效获取数据的数据结构。索引:排好序的快速查找数据结构!...因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。 什么叫视图?游标是什么?

    92030

    「mysql优化专题」90%程序员面试都用得上的索引优化手册(5)【面试重点】

    六、百万级别或以上的数据如何删除 ? 一、索引的概述 1)什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。...3.)所有的非终端结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。 4.)B+ 树中,数据对象的插入和删除仅在叶节点上进行。...),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位置;如果发生Hash碰撞(两个不同关键字的Hash值相同),则在对应Hash键下以链表形式存储。...百万级别或以上的数据如何删除 关于索引:由于索引需要额外的维护成本,因为索引文件是单独存在的文件,所以当我们对数据的增加,修改,删除,都会产生额外的对索引文件的操作,这些操作需要消耗额外的IO,会降低增...与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了。 今天,索引的讲解就到这里,重点提一下,索引基本原理和创建索引的原则是重点,面试基本必问!大家可以收藏好多理解理解。

    58330

    「春招系列」MySQL面试核心25问(附答案)

    /函数将被保留,但其状态会变为:invalid。...TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。...50修改为100,但是我还没有提交修改,另一个事务看到这个修改,而这个时候原事务发生了回滚,这时候A还是50,但是另一个事务看到的A是100.可能会导致脏读、幻读或不可重复读 提交读,对于一个事务从开始直到提交之前...16、MySQL索引主要使用的两种数据结构是什么?...不宜:1)对于查询中很少涉及的列或者重复值比较多的列 2)对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。 24、覆盖索引是什么?

    53330

    24个经典的MySQL索引问题,你都遇到过哪些?

    为什么 13、百万级别或以上的数据如何删除 14、前缀索引 15、什么是最左前缀原则?...(从磁盘取数据是最影响性能的) join 对join语句匹配关系(on)涉及的字段建立索引能够提高效率 索引覆盖 如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描...3)所有的非终端结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。 4)B+ 树中,数据对象的插入和删除仅在叶节点上进行。...(4)与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了。...性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差。而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低。

    2.1K21

    Mysql最全面试指南

    字段为什么要求定义为not null? 2.42. 如果要存储用户的密码散列,应该使用什么字段进行存储? 2.43. 数据库结构优化? 2.44....此外,新版的MySQL中对row级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行记录。 mysql有哪些数据类型?...与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了。 什么是最左前缀原则?什么是最左匹配原则?...它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。 什么是脏读?幻读?不可重复读?...如果要存储用户的密码散列,应该使用什么字段进行存储? 密码散列,盐,用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。 数据库结构优化?

    1.4K40

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

    此外,新版的MySQL中对row级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行记录。 数据类型 mysql有哪些数据类型 ? ?...(从磁盘取数据是最影响性能的) join 对join语句匹配关系(on)涉及的字段建立索引能够提高效率 索引覆盖 如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描...3.)所有的非终端结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。 4.)B+ 树中,数据对象的插入和删除仅在叶节点上进行。...与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了。...联合索引是什么?为什么需要注意联合索引中的顺序? MySQL可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引。

    1.1K60

    两万字的数据库面试题,不看绝对后悔

    这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15...7.什么叫视图?游标是什么? 视图: 是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。...事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?...看几个问题就明了了: 如果子事务回滚,会发生什么? 父事务会回滚到进入子事务前建立的save point,然后尝试其他的事务或者其他的业务逻辑,父事务之前的操作不会受到影响,更不会自动回滚。...如果父事务回滚,会发生什么? 父事务回滚,子事务也会跟着回滚!为什么呢,因为父事务结束之前,子事务是不会提交的,我们说子事务是父事务的一部分,正是这个道理。那么: 事务的提交,是什么情况?

    1.2K42

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

    大家好,又见面了,我是全栈君。 为什么要使用数据库 数据保存在内存 优点:存取速度快 缺点:数据不能永久保存 数据保存在文件 优点:数据永久保存 缺点:1)速度比内存操作慢,频繁的IO操作。...此外,新版的MySQL中对row级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行记录。...(从磁盘取数据是最影响性能的) join 对join语句匹配关系(on)涉及的字段建立索引能够提高效率 索引覆盖 如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描...与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了。...联合索引是什么?为什么需要注意联合索引中的顺序? MySQL可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引。

    48610

    java面试题

    接口,会调用其实现的destory方法 最后,如果在spring配置Bean的时候,指定了destory-method属性,就会调用其配置的销毁方法 在什么情况下选择用ArrayList or LinkedList...尽量使用前缀来索引 删除不再使用或者很少使用的索引 最左前缀匹配原则:MySQL会一直向右匹配直到遇到范围查询(> < between like)就停止匹配 =和in可以乱序 尽量选择区分度高的列作为索引...Key key列显示MySQL实际决定使用的键(索引),如果没有选择索引,键是NULL。...B-Tree索引适用于全键值,键值范围,键前缀查找,支持排序 B-Tree索引限制: 如果不是按照索引的最左列开始查询,则无法使用索引 不能跳过索引中的列 如果查询中有个范围查询,则其右边的所有列都无法使用索引优化查询...可以根据索引覆盖什么,再根据索引列关联自身查询其它的列 select id, name, age where student s1 inner join ( select id where student

    11710

    MySQL面试必杀技!不会这些,面试官都要哭了,你还想找工作?

    在实际应用中,需要结合索引和查询优化来提高查询性能。 索引的监控与调整: 索引的性能会随着数据库的使用而发生变化。因此,定期监控索引的使用情况和性能是非常重要的。...如果发现索引性能不佳或变得冗余,需要及时调整优化策略,如重建索引、删除不再需要的索引等。 一个表中可以有多个(非)聚簇索引吗? 面试官为什么会提出这个问题?...非聚簇索引:更新操作通常只需更新索引项中的指针或值,而不需要移动数据,因此性能更高。但是,如果更新改变了索引列的值,则需要更新索引结构。...删除(Delete): 聚簇索引:删除操作可能需要重新组织数据以保持索引顺序,这可能会导致性能开销。 非聚簇索引:删除操作只需从索引结构中删除相应的索引项,而不需要重新组织数据,因此通常性能更高。...更新:更新操作通常只需更新索引项中的指针或值,而不需要移动数据。但是,如果更新改变了索引列的值,则需要更新索引结构。 删除:删除操作只需从索引结构中删除相应的索引项。

    7310

    interview-db

    TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。...为了避免多个索引使事情变复杂(MySQL的SQL优化器在多索引时行为比较复杂),这里我们将辅助索引drop掉: 6.2,全列匹配 全列匹配(此时若没有按照索引顺序时,mysql查询优化器会自动的调整顺序来使用定义好的索引...6.7 查询条件中含有函数或表达式 很不幸,如果查询条件中含有函数或表达式,则MySQL不会为这列使用索引(虽然某些在数学意义上可以使用)。...能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小 8.3、事务处理 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快...但是InnoDB的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like

    46910

    www.xttblog.com MySQL InnoDB 索引原理

    聚簇索引按照如下规则创建: 当定义了主键后,InnoDB会利用主键来生成其聚簇索引; 如果没有主键,InnoDB会选择一个非空的唯一索引来创建聚簇索引; 如果这也没有,InnoDB会隐式的创建一个自增的列来作为聚簇索引...,因为在插入/更新记录时,实时的去更新carlinality对于 MySQL的负载是很高的,如果数据量很大的话,触发 MySQL重新统计该值得条件是当表中的1/16数据发生变化时。...索引分裂 此处提一下索引分裂,就我个人理解,在 MySQL插入记录的同时会更新配置的相应索引文件,根据以上的了解,在插入索引时,可能会存在索引的页的分裂,因此会导致磁盘数据的移动。...自增主键的弊端 对于高并发的场景,在InnoDB中按照主键的顺序插入可能会造成明显的争用,主键的上界会成为“热点”,因为所有的插入都发生在此处,索引并发的插入可能会造成间隙锁竞争,何为间隙锁竞争,下个会详细介绍...order where order_id > 1000,如果查看其执行计划的话,发现是用use index condition,走的是索引覆盖。

    1.1K50

    mysql之视图、索引

    大家好,又见面了,我是你们的朋友全栈君。 视图 什么是视图 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。...使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。...简化数据操作 在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。...视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。...主要作用是提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,MySQL默认引擎不支持; 索引使用场景 什么时候要使用索引?

    98530

    数据库面试题汇总

    ; MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。...事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?...看几个问题就明了了: 如果子事务回滚,会发生什么? 父事务会回滚到进入子事务前建立的save point,然后尝试其他的事务或者其他的业务逻辑,父事务之前的操作不会受到影响,更不会自动回滚。...如果父事务回滚,会发生什么? 父事务回滚,子事务也会跟着回滚!为什么呢,因为父事务结束之前,子事务是不会提交的,我们说子事务是父事务的一部分,正是这个道理。那么: 事务的提交,是什么情况?...3、系统奔溃后,MyISAM恢复起来更困难,能否接受; 4、MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB

    54420
    领券