mysql
文章平均质量分 78
Nathaniel333
源码爱好者/java八股文总结者/AI爱好者
展开
-
面试专栏:where和having
写一个SQL语句,一个表中有姓名、课程、成绩,请你查询出平均分大于60分的同学的名字。原创 2024-03-13 13:50:42 · 442 阅读 · 0 评论 -
面试专栏:缓存数据库一致性
为了满足用户对一趟列车不同站点不同座位类型的余量查询需求,我们采取了一种优化方案。。然而,在用户创建订单并完成支付时,我们需要同时从数据库和缓存中扣减相应的列车站点余票。这种设计不仅提高了查询效率,也保证了数据的一致性,确保订单操作的准确性。在这个业务场景中的缓存与数据库一致性如何保证?原创 2024-02-24 16:00:21 · 897 阅读 · 0 评论 -
面试专栏:分库分表
分库分表是一种数据库分片技术,用于解决大规模应用中单一数据库容量不足以支持高并发和大数据量的问题。它将一个大型的数据库拆分成多个小型数据库,每个小型数据库称为一个分片。每个分片存储部分数据,从而降低了单个数据库的负担。简单来说,分库是将原本的单库拆分为多个库,分表是将原来的单表拆分为多个表。很多情况下,分库分表并不是从系统设计开始就存在的,而是系统运行过程中,出现数据量庞大或者查询性能慢等问题延伸而来。如果你在业务功能开发时,已经预知业务数据库量,应提前进行分库或者分表,做好分片规范,避免系统运行时拆分。原创 2024-02-23 15:24:05 · 901 阅读 · 0 评论 -
面试专栏:脏读,不可重复读和幻读专题
经常有面试官提出这么一个问题:什么是脏读、不可重复读和幻读?关于这个问题,我们还得从数据库的管理系统说起,当数据库管理系统在写入或者更新数据的过程中,为了保证数据是正确可靠的,需要满足四个特性:原子性、一致性、隔离性和持久性,简称 ACID !例如以银行转账为例,从原账户扣除金额,以及向目标账户添加金额,这两个阶段的操作,被视为一个完整的逻辑过程,不可拆分,简单的说,要么全部成功,要么全部失败!这个过程被称为一个事务,具有 ACID 四个特点!说了这么多,跟我们今天要说的脏读、不可重复读和幻读有什么关系呢?原创 2024-02-21 15:17:03 · 826 阅读 · 0 评论 -
面试专栏:Mysql索引
GEOMETRY。原创 2023-11-29 20:40:11 · 360 阅读 · 0 评论 -
面试专栏:Mysql索引失效
对于复合索引,如果查询条件未使用索引的最左前缀,则索引可能不会被使用。:如果索引列的值大多相同(低选择性),优化器可能选择不使用索引。:如果列的类型与过滤条件中的类型不匹配,索引可能失效。:比如将字符串类型的字段与数字进行比较。条件前后列不同,可能导致索引失效。:以通配符开头的LIKE查询(如。:这会使得索引无法有效使用。)通常不会使用索引。原创 2023-11-29 19:15:29 · 358 阅读 · 0 评论 -
面试专栏:分库分表ID
在进行水平分库分表之后,生成唯一的ID变得具有挑战性,因为你需要在多个数据库和表中保持ID的唯一性。原创 2023-11-27 19:13:06 · 330 阅读 · 0 评论 -
面试专栏:MVCC
MVCC,全称为 Multi-Version Concurrency Control,是一种数据库管理系统中用于实现并发控制的技术。MVCC允许多个事务同时访问数据库,并且在保持数据一致性的同时避免了常见的并发问题,如脏读、不可重复读和幻读。MVCC的核心思想是为每个事务创建一个独立的版本(或快照)来访问数据库,而不是像传统的锁定机制一样直接锁定数据。每个事务在执行时只能看到在其启动时间点之前已经存在的数据版本。这种方式可以提高并发性,因为不同事务之间不会互相阻塞,只有在写入冲突的情况下才会导致事务等待。原创 2023-11-25 00:00:40 · 828 阅读 · 0 评论 -
面试专栏:Union和Union all的区别
操作可以去重行,但它也会导致额外的性能开销。在某些情况下,如果你已经知道结果集不会包含重复行,使用。可能是更好的选择,因为它可以提高查询性能。原创 2023-11-24 14:46:05 · 413 阅读 · 0 评论 -
窗口函数专题
窗口函数与其他函数的语法区别主要在于OVER子句,接下来我们介绍它的语法。其中,window_function 是窗口函数的名称;expr 是参数,有些函数不需要参数;OVER子句包含三个选项:分区()、排序(ORDER BY)以及窗口大小(转载 2023-11-08 22:42:25 · 43 阅读 · 0 评论 -
Next Key Lock专题
Next-Key Lock是行锁和间隙锁的结合。对于给定的索引项,Next-Key Lock会锁定该索引项以及前一个索引项和它之间的间隙。这意味着,如果有一个Next-Key Lock在索引项B上,那么从上一个索引项A到B之间的范围是被锁定的,其他事务不能在这个范围内插入新的索引项。Next-Key Locks可以防止幻读,因为它们不仅锁定现有的索引记录,还锁定两个索引记录之间的间隙。这样,在一个事务中读取一个范围内的记录时,其他事务不能在该范围内插入新记录,从而保证了一致性视图。原创 2023-11-08 21:13:24 · 67 阅读 · 0 评论 -
数据库表各种连接区别专题
在实际应用中,通常会避免笛卡尔积,因为它会造成性能问题,并返回大量无用的数据。相反,连接用于精确提取我们需要的数据,通常是通过在两个表之间定义明确的关系来实现的。根据“小表驱动大表”法则,使用右连接时,应该让右表为小表,左表为大表。根据“小表驱动大表”法则,使用左连接时,应该让左表为小表,右表为大表。这通常不是一个有用的操作,因为它生成大量的组合,而这些组合中的大多数通常都是无意义的。如果右表没有匹配,则结果中右表的部分会包含NULL。如果左表没有匹配,结果中左表的部分会包含NULL。原创 2023-11-08 15:31:35 · 96 阅读 · 0 评论 -
事务与存储过程对比专题
事务是数据库操作的一个执行单元,由一系列的数据库操作组成。它遵循ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。原创 2023-11-08 14:34:29 · 42 阅读 · 0 评论 -
mysql主键索引原理
如果没有索引:若我们要在几百万条记录中找出一个名为“张三”的人,这个时候我们只能逐条遍历记录,直至找到这个人;如果有索引:假设名为“张三”的人所在记录的索引为 999,我们只需要像在目录中查页码一样,很快就可以知道第 999 页大概在哪一个章节。索引虽然是以插入、更新、删除的速度为代价的,这些写操作增加了大量的IO,但是这些代价带来的就是海量数据的检索速度的提升。原创 2023-10-16 09:19:35 · 51 阅读 · 0 评论 -
mysql联合索引底层专题
由于回答只有一张图一句话,可能会让你有点看不懂,所以我们就借助前人的肩膀用这个例子来更加细致的讲探寻一下联合索引在B+树上的存储结构吧。首先,表T1有字段a,b,c,d,e,其中a是主键,除e为varchar其余为int类型,并创建了一个联合索引idx_t1_bcd(b,c,d),然后b、c、d三列作为联合索引,在B+树上的结构正如上图所示。联合索引的所有索引列都出现在索引数上,并依次比较三列的大小。上图树高只有两层不容易理解,下面是假设的表数据以及我对其联合索引在B+树上的结构图的改进。原创 2023-10-16 07:57:48 · 24 阅读 · 0 评论 -
数据表千万级优化专题(1)
做优化,SQL条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,可以通过EXPLAIN PARTITIONS来查看某条SQL语句会落在那些分区上,从而进行SQL优化,我测试,查询时不带分区条件的列,也会提高速度,故该措施值得一试。但:分表需要修改源程序代码,会给开发带来大量工作,极大的增加了开发成本,故:只适合在开发初期就考虑到了大量数据存在,做好了分表处理,不适合应用上线了再做修改,成本太高!但是有很高的运维成本,一般公司是玩不起的,没十万投入是不会有很好的产出的!转载 2023-10-04 20:26:17 · 53 阅读 · 0 评论 -
InnoDB锁专题
下面列举innodb支持的锁。行级锁共享锁:S锁,允许事务读一行数据排他锁:X锁,允许事务删除或更新一行数据XSX不兼容不兼容S不兼容兼容X锁与任何的锁都不兼容,而S锁仅和S锁兼容。注意:行锁实际上是索引记录锁,对索引记录的锁定。即使表没有建立索引,InnoDB也会创建一个隐藏的聚簇索引,并使用此索引进行记录锁定。意图锁意图锁定是表级锁定,标识事务稍后对表中的行做哪种类型的锁定(共享或独占)意向共享锁(IS):事务想要获得一张表中某几行的共享锁。转载 2023-09-28 16:34:46 · 18 阅读 · 0 评论 -
InnoDB储存专题
本文分享InnoDB如何规划表空间,如何存储表空间元信息以及用户数据。思考一个问题,如果给你一个文件,让你存储MySql的数据,你会怎么做?下面是一种比较合理的思路。首先把文件划分成大小相等的块(InnoDB中的页),每次取一块使用。为了管理这些块信息,我们也拿出一块空间,存储每一块空间的位置,偏移量,以及已经使用和剩余未使用的块(InnoDB中的FSP HEADER PAGE,文件管理页)转载 2023-09-28 16:33:30 · 26 阅读 · 0 评论 -
INNODB架构专题
存放MySql表结构定义。在数据目录下,每一个表都有一个子目录,存放对应的表结构定义文件,后缀为frmMySql8.0后,移除了.frm文件,表结构定义存放到数据库系统表中。每个存储引擎都可以自行定义的文件保存引擎所需的数据。InnoDB存储引擎定义了以下文件:转载 2023-09-28 16:31:50 · 28 阅读 · 0 评论 -
Mysql查询过程专题
希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则能够按照预想的合理的方式运行。。查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生了变化,那么和这个表相关的所有缓存数据都将失效。MySQL将缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括了以下因素,即查询本身、当前要查询的、客户端协议的版本等一些其他可能影响返回结果的信息。原创 2023-09-27 21:30:16 · 31 阅读 · 0 评论 -
ES与MySQL的结合专题
大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢?这是能想到的最直接的方式,在写入MySQL,直接也同步往ES里写一份数据。转载 2023-09-21 14:48:56 · 171 阅读 · 0 评论 -
Mysql调优专题
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。原创 2023-08-27 21:49:35 · 25 阅读 · 0 评论 -
Mysql索引专题
高效获取数据数据结构加快数据库的查询速度。原创 2023-08-27 19:17:13 · 26 阅读 · 0 评论 -
MySQL集群专题
而从库的i/o线程去请求主库的binlog,并将得到的binlog日志写到中继日志(relaylog)中,从库的sql线程,会读取relaylog文件中的日志,并解析成具体操作,通过主从的操作一致,而达到最终数据一致。(2),可以让某个从数据库暂时中断复制进程,来备份数据,从而不影响主库的对外服务,如果使用主库采用backup,会使主库长时间处于只读状态,这样外界的写请求都会被阻塞,影响并发。保证集群数据的一致性,使用zookeeper可以有效的保证proxy的高可用性,可以较好的避免网络分区现象的产生。原创 2023-08-19 21:42:53 · 24 阅读 · 0 评论 -
MySQL锁专题
使用场景:乐观锁常用于写操作比较少(多读)的场景下,即冲突很少发生的情况下,这样省去了锁的开销,加大了系统吞吐量。如果是多写的场景,一般会经常产生冲突,CAS会发生自旋,这就会导致上层应用会不断的进行Retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。(1)Read Uncommit 隔离级别下,读取数据不需要加锁,这样就不会跟被修改的数据上的排他锁冲突,但会出现脏读(事务B读到了事务A修改了数据但未提交事务并且回滚了的脏数据)表级锁速度快,但冲突多,行级冲突少,但速度慢。原创 2023-08-19 17:22:12 · 26 阅读 · 0 评论 -
MySQL MVCC专题
为了保证数据的安全性,事务进行中时会不断的产生redo log,在事务提交时进行一次flush操作,保存到磁盘中, redo log是按照顺序写入的,磁盘的顺序读写的速度远大于随机读写。undo log: 除了记录redo log外,当进行数据修改时还会记录undo log,undo log用于数据的撤回操作,它记录了修改的反向操作,比如,插入对应删除,修改对应修改为原来的数据,通过undo log可以实现事务回滚,并且可以根据undo log回溯到某个特定的版本的数据,实现MVCC。原创 2023-08-19 13:31:27 · 36 阅读 · 0 评论 -
MySQL面试相关(2)
缺点:(1)比页锁和表锁占用更多内存(2)在表的大多数使用中,速度更慢,因为你必须获得更多锁(3)若你经常使用GROUP BY或者必须扫描整表,比其他锁慢很多。外连接:其结果不仅包含符合条件的行,还会包含左表(左外连接),右表(右外连接)或两个表(全外连接,MYSQL目前不支持)的所有数据行。内连接:只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的不会出现在结果集中,只连接匹配的行。(2)当前读:读取的是记录的当前版本,并且当前读返回的记录都会加锁,保证其他并发事务不会再修改这条记录。原创 2023-08-09 16:33:44 · 22 阅读 · 0 评论 -
MySQL面试相关(1)
(3),可重复读,保证多次读取同一个数据时,其值和事务开始时是一致的,禁止脏读和不可重复读取,但避免不了幻读(同样事务操作,前后两个时间对同一数据项的读取,可能出现不一致)最左前缀匹配等缺点,B+树可以带来较好的查询速度。(1)首先explain语句,看是否额外load了额外数据,可能是查询了多余行并且抛弃掉了,可能是加载了许多结果中不需要的列。(2)分析语句的执行计划,然后获得其索引使用情况,修改语句或索引,使语句尽可能命中索引。(2),读已提交,授权读取已提交的数据,不允许脏读,允许不可重复读取。原创 2023-08-09 15:56:51 · 24 阅读 · 0 评论