![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
二、数据库
MySQL数据库、Oracle数据库
还能在学一小时
这个作者很懒,什么都没留下…
展开
-
数据库三大范式是什么
数据库三大范式是关系数据库设计中的一组规范,旨在提高数据结构的合理性、减少数据冗余和提高数据操作的效率。但要注意,范式化设计并不是一成不变的,根据具体的业务需求和应用场景,有时也需要对范式进行适度的调整和冗余处理。这三个范式是逐步规范化设计数据库的步骤,目的是。原创 2023-12-18 16:46:16 · 367 阅读 · 0 评论 -
MySQL为什么默认引擎是InnoDB
需要注意的是,虽然 InnoDB 是 MySQL 默认的存储引擎,但在某些场景下,可以根据实际需求选择其他存储引擎,如 MyISAM、Memory 等。不同的存储引擎适用于不同的应用场景和需求。MySQL 默认的存储引擎是 InnoDB,这是因为 InnoDB 在性能、事务支持和容错能力等方面具有较好的特性,适合大多数应用场景。原创 2023-12-18 17:16:55 · 564 阅读 · 0 评论 -
什么是索引?索引有哪些优缺点?
因此,在设计数据库时,需要根据具体的查询需求、数据特点和系统环境来决定是否以及如何建立索引,以平衡查询性能和维护成本。它类似于书籍的目录,通过建立特定的数据结构将列或多个列的值与它们在数据表中对应的行关联起来,以加快查询速度。原创 2023-12-18 17:23:47 · 588 阅读 · 0 评论 -
MySQL 索引分类?
以上就是MySQL常见的四种索引,这些不同类型的索引在数据库中起到了加速数据检索操作的作用,可以根据具体的需求和使用场景选择适当的索引类型。同时,需要注意索引的创建对写操作(如插入、更新、删除)可能会产生额外的开销,因此需要权衡索引的使用与数据操作的平衡。原创 2023-12-19 10:38:40 · 368 阅读 · 0 评论 -
MyISAM索引与InnoDB索引的区别?
以上就是MyISAM索引与InnoDB索引的五点区别,我们在实际使用时需要根据具体的应用需求和场景来选择适合的存储引擎和索引类型。原创 2023-12-19 10:58:53 · 504 阅读 · 0 评论 -
创建索引时需要注意什么?
综上所述,创建索引需要根据具体的查询需求、数据特点和系统环境来进行权衡和决策。合理创建索引可以提升数据库的性能,但也需要注意索引的维护成本和更新操作的影响。原创 2023-12-19 11:16:02 · 421 阅读 · 0 评论 -
什么时候不要使用索引?
需要注意的是,实际情况还需结合具体的业务需求、数据规模和性能要求来综合考虑。在设计数据库时,综合权衡索引的使用与否,并进行性能测试和优化是非常重要的。在大多数情况下,使用索引可以提高数据库查询的性能和效率。原创 2023-12-19 13:49:13 · 439 阅读 · 0 评论 -
MySQL 中有哪几种锁?
需要注意的是,MySQL的不同存储引擎对锁的支持和实现方式可能有所不同。例如,MyISAM存储引擎使用表级锁来控制并发访问,而InnoDB存储引擎则支持更细粒度的行级锁,提供更好的并发性能和数据一致性。原创 2023-12-19 14:46:21 · 572 阅读 · 0 评论 -
MySQL 中有哪几种锁?(深入精讲)
只有BDB存储引擎支持页锁,页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。当两个事务同时对表中某行数据进行更新操作时,若一个事务先到达并给该行加上排它锁,那么另一个事务就不能在该行加任意类型的锁,直到第一个事务释放了该行的锁。数据库中的一种表级锁,在行级锁的基础上引入的一种概念。开启A事务修改id为8的数据,但是不提交事务,同时开启事务B进行插入id为8的数据。在 MySQL 中,原创 2023-12-19 17:30:04 · 1695 阅读 · 0 评论 -
B 树和B+树的区别?
B树和B+树在数据存储方式、数据检索方式、范围查询效率以及适用场景方面存在区别。B树适合随机读写操作,而B+树适合范围查询和顺序访问。在实际应用中,根据不同的场景和需求选择合适的树结构可以带来更高效的数据处理和索引操作。B树和B+树是常用的数据结构,用于在数据库中进行索引操作。原创 2023-12-19 17:31:21 · 377 阅读 · 0 评论 -
B 树和B+树的区别?(深入精讲)
MySQL的索引机制中,有一点可谓是路人皆知,既默认使用B+树作为底层的数据结构。原创 2023-12-22 11:30:47 · 355 阅读 · 0 评论 -
mysql 中in 和exists 的区别
如果子查询返回了结果,EXISTS 条件就会被认为是满足的。使用 IN 条件时,我们提供一个固定的值列表,然后将其与指定列的值进行比较。如果列中的值与列表中的任何一个值匹配,就会返回结果。如果子查询(SELECT * FROM another_table WHERE condition)返回了至少一行结果,那么主查询中的记录将会被返回。如果 column_name 的值与 value1、value2 或 value3 中的任何一个相匹配,那么这条记录将会被返回。原创 2023-12-19 17:34:47 · 528 阅读 · 0 评论 -
MySQL多表查询时有哪些连接方式
在实际使用中我们可以根据具体的需求选择合适的方式来联合多个表,获取所需的数据。原创 2023-12-19 17:35:22 · 666 阅读 · 0 评论 -
什么是最左前缀原则?
有时候,根据具体的查询需求和数据模式,可能需要创建额外的索引来支持更复杂的查询条件。因此,在设计和优化数据库索引时,需要综合考虑查询的特点和性能要求,灵活选择适当的索引策略。具体来说,如果在表中创建了一个复合索引,包含多个列 A、B、C,那么最左前缀原则要求查询中的过滤条件必须从索引的最左边开始,并且不能跳过中间的列。只有当查询中的过滤条件与索引的最左前缀完全匹配时,索引才能被充分利用。它指的是在使用复合索引时,索引的最左边的连续几个列会被用于查询过滤条件的匹配。原创 2023-12-19 17:35:55 · 1597 阅读 · 0 评论 -
什么是覆盖索引?
而如果使用了覆盖索引,由于索引已经包含了查询所需的所有列的值,数据库系统可以直接通过索引来获取这些值,而不需要额外地读取数据页。这样可以减少磁盘 I/O 的次数和数据在内存中的占用,提高查询的效率。使用覆盖索引可以减少数据库系统的工作量,提高查询的性能。它可以避免不必要的数据读取操作,减少磁盘 I/O,并且在内存中更高效地处理查询操作。因此,在设计数据库索引时,可以考虑创建覆盖索引来优化相关的查询。覆盖索引是指一个索引包含了查询所需的所有列,而无需访问表的实际数据页。原创 2023-12-19 17:36:38 · 583 阅读 · 0 评论 -
什么是索引下推?
在传统的查询执行过程中,数据库引擎首先根据索引定位到符合过滤条件的数据行,并将这些行读取到内存中,然后再进行进一步的过滤操作。而索引下推则在这一步骤中尽可能地将过滤操作下推到存储引擎层面,避免将不符合条件的数据行读取到内存中。通过索引下推,数据库系统可以在存储引擎层面根据索引和过滤条件提前过滤掉不符合条件的数据,减少了需要传递给查询引擎的数据量和内存消耗。需要注意的是,索引下推并不是对所有类型的查询都适用,它更适用于复杂查询条件、多列条件的查询中,能够有效地减少不必要的数据读取和传输。原创 2023-12-19 17:37:09 · 678 阅读 · 0 评论 -
什么是索引下推?(深入精讲)
索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的次数。ICP 适用于 MYISAM 和 INNODB,本篇的内容只基于 INNODB。原创 2023-12-22 11:40:24 · 1804 阅读 · 0 评论 -
为什么需要数据库连接池呢?
总结来说: 数据库连接池是为了提高性能、更有效地管理资源、提高并发处理能力和增加连接的可靠性而存在的。它通过缓存已经建立好的连接,复用连接以及管理连接的生命周期,从而减少了连接的开销,提高了系统的性能和稳定性。首先,我们要明白数据库连接池是一种管理和维护数据库连接的技术。它在应用程序和数据库之间建立了一个连接的缓冲池,用于存储和复用已经建立好的数据库连接。那为什么需要数据库连接池呢?原创 2023-12-22 14:04:57 · 444 阅读 · 0 评论 -
并发事务带来哪些问题?
不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增或者删除比如多次读取一条记录发现记录增多或减少了。原创 2023-12-22 17:35:14 · 323 阅读 · 0 评论 -
MySQL 记录货币用什么字段类型
需要注意的是,DECIMAL字段类型占用的存储空间相对较大,因此在设计表结构时需要考虑存储和性能需求,合理选择DECIMAL字段的位数。DECIMAL字段类型用于存储精确的定点数值,可以指定总共的位数和小数点后的位数。这使得它非常适合用于存储货币金额,因为货币金额通常需要精确到小数点后几位。上述语句创建了一个名为amount的DECIMAL字段,总共有18位,其中小数点后有2位。在MySQL中记录货币金额,一般推荐使用DECIMAL字段类型。原创 2023-12-25 10:35:00 · 855 阅读 · 0 评论 -
CHAR 和 VARCHAR 的区别?
综上所述,CHAR适合存储长度固定且固定大小的数据,而VARCHAR适用于长度可变的数据。原创 2023-12-25 11:03:37 · 468 阅读 · 0 评论 -
count(1)、count(*) 与 count(列名) 的区别?
COUNT(1)和COUNT(*)的性能较好且结果一致,而COUNT(列名)则对非空值进行计数。在实际使用时,可以根据具体的查询需求和性能要求选择适当的写法。在SQL查询中,COUNT(1)、COUNT(*)和COUNT(列名)是用于计算行数的聚合函数,但它们在实际应用时有一些区别。原创 2023-12-25 11:26:08 · 424 阅读 · 0 评论 -
UNION 与UNION ALL 的区别?
在使用时,可以根据具体的需求来选择合适的操作符。如果需要去除重复的行,可以使用UNION;如果不需要去重,或者对性能要求较高,可以使用UNION ALL。需要注意的是,使用UNION或UNION ALL时,要求被合并的查询结果的列数和列类型保持一致。原创 2023-12-28 16:01:15 · 343 阅读 · 0 评论 -
如何快速定位慢SQL
通过这些步骤的分析,找出慢查询产生的原因,并针对性地进行优化和调整,来提升查询性能。原创 2023-12-28 16:07:15 · 403 阅读 · 0 评论 -
慢SQL你是怎么优化的
以上是一些常见的SQL慢查询优化措施,具体的优化方法还因根据具体问题和应用场景进行调整。原创 2023-12-28 16:09:13 · 418 阅读 · 0 评论 -
慢SQL你是怎么优化的(深入精讲)
减少数据扫描返回更少数据减少交互次数减少服务器CPU及内存开销。原创 2023-12-28 16:39:46 · 2263 阅读 · 0 评论 -
索引失效的情况有哪些
综上所述,我们要解决索引失效的问题,可以通过合理设计索引、优化查询语句以及避免索引失效的情况发生来提升查询性能。索引失效是指在使用索引进行查询时,索引无法发挥作用,导致查询性能下降。原创 2023-12-28 16:45:13 · 501 阅读 · 0 评论 -
说下你对数据库事务的理解
事务中的所有操作要么全部执行成功,要么全部回滚到事务开始前的状态。如果在事务执行期间发生错误,系统将回滚所有已执行的操作,以保持数据的一致性。事务的执行是相互隔离的,即每个事务对其他事务是透明的。并发执行的多个事务不会相互干扰,每个事务感知不到其他事务的存在。事务的执行不会破坏数据库的完整性约束。在事务开始和结束时,数据库必须处于一致的状态。如小李转账100元给小白,不管操作是否成功,小李和小白的账户总额是不变的。一旦事务提交成功,事务中的所有操作都必须持久化到数据库中。以上就是我对数据库事务的理解。原创 2023-12-28 16:50:50 · 314 阅读 · 0 评论 -
事务的隔离级别有哪些
MySQL支持以下四个事务隔离级别:原创 2023-12-28 16:57:04 · 335 阅读 · 0 评论 -
事务的隔离级别有哪些(深入精讲)
如果其中任何一个操作失败,整个事务都会被回滚,即所有操作都会被撤销,数据库回到事务开始之前的状态。这样可以保证数据的一致性和完整性,避免了数据丢失或者不一致的情况。在实际应用中,需要根据具体情况选择合适的隔离级别,平衡数据的一致性和并发性能。例如,在高并发的Web应用程序中,可以选择可重复读隔离级别,以保证数据的一致性和并发性能。MySQL事务隔离级别是指在多个事务同时访问数据库时,数据库如何保证数据的一致性和隔离性。隔离级别越高,事务的并发性能就越低。可能会导致脏读、幻读或不可重复读。原创 2023-12-28 17:11:03 · 971 阅读 · 0 评论 -
讲讲你对MVCC的理解
MVCC是一种并发控制策略,它在多个事务同时执行时,确保数据库的一致性和隔离性。MVCC通过为每个事务创建数据的不同版本,避免了锁竞争问题。以上就是MVCC的工作原理。它是通过使用多个版本的数据来实现并发控制,提高了数据库的并发性能,并确保了事务之间的隔离性和数据一致性。原创 2023-12-28 17:16:50 · 348 阅读 · 0 评论 -
深度解析:掌握MVCC机制的核心原理
当然,锁不可避免的会导致性能下降,但是,锁也有乐观和悲观之分,上一讲我们聊到的,隔离级别中的串行化就是一种悲观的思想,可以直接避免并发事务中所有的问题,但是性能也是下降的非常严重。MySQL中的读未提交和序列化并不需要MVCC机制,读未提交,直接读取别人未提交的数据,而序列化全程用加锁的方式,也用不上MVCC, 大家体会下。MVCC全称(多版本并发控制),本质就是通过一种乐观锁的思想,维护数据的多个版本,以减少数据读写操锁的冲突,做到即使有读写冲突时也能做到。是如何在性能和一致性中权衡的呢?原创 2023-12-28 17:28:33 · 824 阅读 · 0 评论 -
Undo log是如何回滚事务的
当事务执行更新操作时,数据库会将相应的旧数据记录在Undo Log中,用于回滚事务时还原到事务开始前的状态。总体而言,事务回滚是通过执行 Undo Log 中记录的反向操作,将事务的修改操作撤销,恢复到事务开始前的状态。在回滚过程中,对于已经提交的其他事务所做的修改需要跳过,只处理属于当前回滚事务的 Undo Log 记录。按照逆序依次处理所有的日志记录,直到达到回滚指针位置或 Undo Log 的起始位置。从Undo Log的末尾开始逆向扫描,按照事务操作的逆序依次处理每个日志记录。原创 2024-01-03 15:09:31 · 534 阅读 · 0 评论 -
讲讲主从复制原理与延迟
然后,从库中有一个 SQL 线程会从中继日志读取 binlog,并执行其中的 SQL 内容,即在从库上再次执行一遍。通过以上措施可以帮助降低主从复制的延迟,提高复制的效率和一致性。首先,主库将变更写入 binlog 日志。从库连接到主库后,有一个 IO 线程负责将。以上就是主从复制的原理。复制到自己本地,并写入到。原创 2024-01-03 15:22:06 · 378 阅读 · 0 评论 -
自增主键会遇到什么问题
使用数据库的自增主键,虽然在很多情况下都很方便,但也可能遇到一些问题:原创 2024-01-03 15:28:18 · 476 阅读 · 0 评论 -
自增主键会遇到什么问题(深入讲解)
自增主键的特点是当表中每新增一条记录时,主键值会根据自增步长自动叠加,通常会将自增步长设置1,也就是说自增主键值是连续的。那么MySQL自增主键值一定会连续吗?今天这篇文章就来说说这个问题,看看什么情况下自增主键会出现不连续?原创 2024-01-03 15:53:29 · 927 阅读 · 0 评论 -
了解MySQL锁升级吗
所以在实际应用时,合理的索引设计、适当的事务隔离级别设置可以帮助减少锁升级的发生,从而提高并发性能和系统吞吐量。然而,在某些情况下,事务无法获取到所需的锁级别,就会触发锁升级。通常情况下,MySQL 会根据事务的需求和操作的对象。原创 2024-01-03 16:10:49 · 683 阅读 · 0 评论 -
如何优化深分页limit 1000000
深分页问题是 MySQL 中常见的性能问题,当你尝试获取大量数据的后续页面时,性能会显著下降。这是因为 MySQL 需要先扫描到指定的偏移量,然后再返回数据。例如,你可以提供搜索功能,让用户快速找到他们需要的数据,而不是浏览大量的页面。如果你的应用程序可以记住上次查询的最后一个 ID,那么你可以使用 WHERE 子句来避免扫描大量数据。覆盖索引可以让 MySQL 在索引中获取所有需要的数据,而无需回表查询。这是因为 MySQL 需要先扫描 1000000 行数据,然后再返回后面的 10 行数据。原创 2024-01-03 16:46:33 · 557 阅读 · 0 评论 -
如何优化深分页limit(深入精讲)
其中,offset 表示起始偏移量,row_count 表示要返回的行数。在执行 SELECT 查询时,MySQL首先会先扫描整个表或使用索引,找到所有符合 WHERE 条件的记录。这个过程需要将所有记录都读入内存,然后根据 LIMIT 子句的指定返回查询结果集中的一部分。例如以下语句表示从第 10001 条数据开始返回 10 条数据。从上面结果可以得出结论:数据量越大,花费时间越长。从上面结果可以得出结论:偏移量越大,花费时间越长。原创 2024-01-03 17:03:03 · 1154 阅读 · 0 评论 -
MySQL 有哪些高可用方案
MySQL的高可用方案主要有以下几种:原创 2024-01-03 17:05:53 · 380 阅读 · 0 评论