37、SQL注入我们之前已经讲解了SQL的使用及优化,正常的SQL调用可以帮我们从数据库中获取想要的数据,然而我们构建的Web应用是个应用程序,本身也可能存在安全漏洞,如果不加以注意,就会出现Web安全的隐患,比如通过非正常的方式注入SQL。 在过去的几年中,我们也...2025-10-27SQL必知必会
36、数据库没有备份,没有使用Binlog的情况下,如何恢复数据?我们上节课讲解了MySQL的复制技术,通过主从同步可以实现读写分离,热备份,让服务器更加高可用。MySQL的复制主要是通过Binlog来完成的,Binlog记录了数据库更新的事件,从库I/O线程会向主库发送Binlog更新的请求,同时主库二...2025-10-27SQL必知必会
35、数据库主从同步我们之前讲解了Redis,它是一种高性能的内存数据库;而MySQL是基于磁盘文件的关系型数据库,相比于Redis来说,读取速度会慢一些,但是功能强大,可以用于存储持久化的数据。在实际工作中,我们常常将Redis作为缓存与MySQL配合来使用,当有数据...2025-10-27SQL必知必会
34、关于索引以及缓冲池的一些解惑这篇文章是进阶篇的最后一篇,在这一模块中,我主要针对SQL运行的底层原理进行了讲解,其中还有很多问题没有回答,我总结了进阶篇中常见的一些问题,希望能对你有所帮助。下面的内容主要包括了索引原则、自适应Hash、缓冲池机制和存储引擎等。 关于索引(B+树...2025-10-27SQL必知必会
33、如何定位SQL执行慢的原因在上一篇文章中,我们了解了查询优化器,知道在查询优化器中会经历逻辑查询优化和物理查询优化。需要注意的是,查询优化器只能在已经确定的情况下(SQL语句、索引设计、缓冲池大小、查询优化器参数等已知的情况)决定最优的查询执行计划。 但实际上SQL执行起来可...2025-10-27SQL必知必会
32、查询优化器是如何工作的?我们总是希望数据库可以运行得更快,也就是响应时间更快,吞吐量更大。想要达到这样的目的,我们一方面需要高并发的事务处理能力,另一方面需要创建合适的索引,让数据的查找效率最大化。事务和索引的使用是数据库中的两个重要核心,事务可以让数据库在增删查改的过程中...2025-10-27SQL必知必会
31、为什么大部分RDBMS都会支持MVCC?上一篇文章中,我们讲到了锁的划分,以及乐观锁和悲观锁的思想。今天我们就来看下MVCC,它就是采用乐观锁思想的一种方式。那么它到底有什么用呢? 我们知道事务有4个隔离级别,以及可能存在的三种异常问题,如下图所示: 在MySQL中,默认的隔离级别是可重...2025-10-27SQL必知必会
30、锁:悲观锁和乐观锁是什么?索引和锁是数据库中的两个核心知识点,不论在工作中,还是在面试中,我们都会经常跟它们打交道。之前我们已经从不同维度对索引进行了了解,比如B+树、Hash索引、页结构、缓冲池和索引原则等,了解它们的工作原理可以加深我们对索引的理解。同时在基础篇的部分中,...2025-10-27SQL必知必会
29、为什么没有理想的索引?我之前讲过页这个结构,表和索引都会存储在页中,不同的DBMS默认的页的大小是不同的,同时我们也了解到DBMS会有缓冲池的机制,在缓冲池里需要有足够多的空间,存储经常被使用到的页,尽可能减少直接的磁盘I/O操作。这种策略对SQL查询的底层执行...2025-10-27SQL必知必会
28、从磁盘IO的角度理解SQL查询成本在开始今天的内容前,我们先来回忆一下之前的内容。 数据库存储的基本单位是页,对于一棵B+树的索引来说,是先从根节点找到叶子节点,也就是先查找数据行所在的页,再将页读入到内存中,在内存中对页的记录进行查找,从而得到想要数据。你看,虽然我们想要查找的,只...2025-10-27SQL必知必会