SQL必知必会
文章平均质量分 90
如果你是一名程序员,那么会用 SQL 无疑是你的基本技能;如果你是产品经理或者运营人员,那么 SQL 将会为你打开一个全新的世界,让你从不一样的视角看待数据,利用数据。
Programmer Liu
每时每刻都在向世界表白!
展开
-
【SQL性能优化】精华篇:关于索引以及缓冲池的一些解惑
这篇文章是性能篇的最后一篇,在这一模块中,我主要针对 SQL 运行的底层原理进行了讲解,其中还有很多问题没有回答,我总结了进阶篇中常见的一些问题,希望能对你有所帮助。下面的内容主要包括了索引原则、自适应 Hash、缓冲池机制和存储引擎等。...原创 2022-07-04 04:14:07 · 573 阅读 · 0 评论 -
【SQL性能优化】如何使用性能分析工具定位SQL执行慢的原因?(优)
我们可以通过慢查询日志定位执行慢的SQL,然后通过 EXPLAIN 分析该 SQL 语句是否使用到了索引,以及具体的数据表访问方式是怎样的。我们也可以使用 SHOW PROFILE 进一步了解 SQL 每一步的执行时间,包括I/O 和 CPU 等资源的使用情况。......原创 2022-07-04 04:03:17 · 367 阅读 · 0 评论 -
【SQL性能优化】查询优化器是如何工作的?
我们总是希望数据库可以运行得更快,也就是响应时间更快,吞吐量更大。想要达到这样的目的,我们一方面需要高并发的事务处理能力,另一方面需要创建合适的索引,让数据的查找效率最大化。事务和索引的使用是数据库中的两个重要核心,事务可以让数据库在增删查改的过程中,保证数据的正确性和安全性,而索引可以帮数据库提升数据的查找效率。如果我们想要知道如何获取更高的 SQL 查询性能,最好的方式就是理解数据库是如何进行查询优化和执行的。...原创 2022-07-04 03:42:57 · 638 阅读 · 0 评论 -
【SQL性能优化】为什么大部分RDBMS都会支持MVCC?
MVCC 的英文全称是 Multiversion Concurrency Control,中文翻译过来就是多版本并发控制技术。从名字中也能看出来,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制,简单来说它的思想就是保存数据的历史版本。这样我们就可以通过比较版本号决定数据是否显示出来(具体的规则后面会介绍到),读取数据的时候不需要加锁也可以保证事务的隔离效果。...原创 2022-07-04 00:50:48 · 186 阅读 · 0 评论 -
【SQL性能优化】锁:悲观锁和乐观锁是什么?(优)
加锁是为了保证数据的一致性,这个思想在程序开发领域中同样很重要。在程序开发中也会存在多线程同步的问题。当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我们就需要保证这个数据在任何时刻最多只有一个线程在进行访问,保证数据的完整性和一致性。......原创 2022-07-04 00:32:05 · 765 阅读 · 1 评论 -
【SQL性能优化】从磁盘I/O的角度理解SQL查询的成本(优)
遇到 I/O 并不用担心,方法找对了,效率还是很高的。我们首先要考虑数据存放的位置,如果是经常使用的数据就要尽量放到缓冲池中,其次我们可以充分利用磁盘的吞吐能力,一次性批量读取数据,这样单个页的读取效率也就得到了提升。...原创 2022-07-02 03:58:29 · 595 阅读 · 0 评论 -
【SQL性能优化】从数据页的角度理解B+树查询
磁盘 I/O 都是基于页来进行读取的,在页之上还有区、段和表空间,它们都是更大的存储单位。我们在分配空间的时候会按照页为单位来进行分配,同一棵树上同一层的页与页之间采用双向链表,而在页里面,记录之间采用的单向链表的方式。...原创 2022-07-02 03:45:12 · 244 阅读 · 0 评论 -
【SQL性能优化】索引的使用原则:如何通过索引让SQL查询效率最大化?(优)
实际工作中,查询的需求多种多样,创建的索引也会越来越多。这时还需要注意,我们要尽可能扩展索引,而不是新建索引,因为索引数量过多需要维护的成本也会变大,导致写效率变低。同时,我们还需要定期查询使用率低的索引,对于从未使用过的索引可以进行删除,这样才能让索引在 SQL 查询中发挥最大价值。...原创 2022-07-02 03:30:55 · 1130 阅读 · 0 评论 -
【SQL性能优化】Hash索引的底层原理是什么?
Hash 算法是通过某种确定性的算法(比如 MD5、SHA1、SHA2、SHA3)将输入转变为输出。相同的输入永远可以得到相同的输出,假设输入内容有微小偏差,在输出中通常会有不同的结果。如果你想要验证两个文件是否相同,那么你不需要把两份文件直接拿来比对,只需要让对方把 Hash 函数计算得到的结果告诉你即可,然后在本地同样对文件进行 Hash函数的运算,最后通过比较这两个 Hash 函数的结果是否相同,就可以知道这两个文件是否相同。......原创 2022-07-02 01:00:02 · 769 阅读 · 1 评论 -
【SQL性能优化】索引的原理:我们为什么用B+树来做索引?
磁盘的 I/O 操作次数对索引的使用效率至关重要。虽然传统的二叉树数据结构查找数据的效率高,但很容易增加磁盘 I/O 操作的次数,影响索引使用的效率。因此在构造索引的时候,我们更倾向于采用“矮胖”的数据结构。B 树和 B+ 树都可以作为索引的数据结构,在 MySQL 中采用的是 B+ 树,B+ 树在查询性能上更稳定,在磁盘页大小相同的情况下,树的构造更加矮胖,所需要进行的磁盘 I/O 次数更少,更适合进行关键字的范围查询。...原创 2022-07-02 00:52:26 · 391 阅读 · 0 评论 -
【SQL性能优化】索引的概览:用还是不用索引,这是一个问题
使用索引可以帮助我们从海量的数据中快速定位想要查找的数据,不过索引也存在一些不足,比如占用存储空间、降低数据库写操作的性能等,如果有多个索引还会增加索引选择的时间。当我们使用索引时,需要平衡索引的利(提升查询效率)和弊(维护索引所需的代价)。在实际工作中,我们还需要基于需求和数据本身的分布情况来确定是否使用索引,尽管索引不是万能的,但数据量大的时候不使用索引是不可想象的,毕竟索引的本质,是帮助我们提升数据检索的效率。......原创 2022-07-01 23:50:54 · 439 阅读 · 0 评论 -
【SQL性能优化】反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
范式本身没有优劣之分,只有适用场景不同。没有完美的设计,只有合适的设计,我们在数据表的设计中,还需要根据需求将范式和反范式混合使用。原创 2022-07-01 22:24:08 · 625 阅读 · 0 评论 -
【SQL性能优化】范式设计:数据表的范式有哪些,3NF指的是什么?
1NF 需要保证表中每个属性都保持原子性;2NF 需要保证表中的非主属性与候选键完全依赖;3NF 需要保证表中的非主属性与候选键不存在传递依赖。原创 2022-07-01 20:50:04 · 376 阅读 · 0 评论 -
【SQL性能优化】当我们思考数据库调优的时候,都有哪些维度可以选择?
简单来说,数据库调优的目的就是要让数据库运行得更快,也就是说响应的时间更快,吞吐量更大。不过随着用户量的不断增加,以及应用程序复杂度的提升,我们很难用“更快”去定义数据库调优的目标,因为用户在不同时间段访问服务器遇到的瓶颈不同,比如双十一促销的时候会带来大规模的并发访问;还有用户在进行不同业务操作的时候,数据库的事务处理和SQL 查询都会有所不同。因此我们还需要更加精细的定位,去确定调优的目标。...原创 2022-07-01 17:55:42 · 183 阅读 · 0 评论 -
【SQL语法基础】如何理解查询优化、通配符以及存储过程?
到这一篇的时候,意味着 SQL 专栏的基础部分正式更新完毕。在文章更新的时候,谢谢大家积极地评论和提问,让专栏增色不少。我总结了一些基础篇的常见问题,希望能对你有所帮助。答疑篇主要包括了 DBMS、查询优化、存储过程、事务处理等一些问题。......原创 2022-07-01 05:51:14 · 145 阅读 · 0 评论 -
【SQL】SQLAlchemy:如何使用Python ORM框架来操作MySQL?
除了学习掌握 SQLAlalchemy 这个 Python ORM 工具以外,我还希望你能了解到ORM 的价值和不足。如果项目本身不大,那么自己动手写 SQL 语句会比较简单,你可以不使用 ORM 工具,而是直接使用上篇文章讲到的 mysql-connector。但是随着项目代码量的增加,为了在业务逻辑层与数据库底层进行松耦合,采用 ORM 框架是更加适合的。......原创 2022-07-01 05:49:18 · 695 阅读 · 4 评论 -
【SQL语法基础】如何使用Python操作MySQL?
在使用基于 DB API 规范的协议时,重点需要掌握 Connection 和 Cursor 这两个对象,Connection 就是对数据库的连接进行管理,而Cursor 是对数据库的游标进行管理,通过它们,我们可以执行具体的 SQL 语句,以及处理复杂的数据。...原创 2022-07-01 02:03:50 · 280 阅读 · 0 评论 -
【SQL语法基础】游标:当我们需要逐条处理数据时,该怎么做?
虽然在处理某些复杂的数据情况下,使用游标可以更灵活,但同时也会带来一些性能问题,比如在使用游标的过程中,会对数据行进行加锁,这样在业务并发量大的时候,不仅会影响业务之间的效率,还会消耗系统资源,造成内存不足,这是因为游标是在内存中进行的处理。如果有游标的替代方案,我们可以采用替代方案。...原创 2022-06-30 02:31:01 · 1307 阅读 · 0 评论 -
【SQL语法基础】初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
隔离级别越低,意味着系统吞吐量(并发程度)越大,但同时也意味着出现异常问题的可能性会更大。在实际使用过程中我们往往需要在性能和正确性上进行权衡和取舍,没有完美的解决方案,只有适合与否。...原创 2022-06-30 01:47:00 · 702 阅读 · 0 评论 -
【SQL语法基础】什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
我们在做数据库操作的时候,可能会失败,但正是因为有事务的存在,即使在数据库操作失败的情况下,也能保证数据的一致性。同样,多个应用程序访问数据库的时候,事务可以提供隔离,保证事务之间不被干扰。最后,事务一旦提交,结果就会是永久性的,这就意味着,即使系统崩溃了,数据库也可以对数据进行恢复。......原创 2022-06-29 02:07:12 · 2771 阅读 · 0 评论 -
【SQL语法基础】什么是存储过程,在实际项目中用得多么?
SQL 的存储过程,它是 SQL 中另一个重要应用,和视图一样,都是对SQL 代码进行封装,可以反复利用。它和视图有着同样的优点,清晰、安全,还可以减少网络传输量。不过它和视图不同,视图是虚拟表,通常不对底层数据表直接操作,而存储过程是程序化的 SQL,可以直接操作底层数据表,相比于面向集合的操作方式,能够实现一些更复杂的数据处理。存储过程可以说是由 SQL 语句和流控制语句构成的语句集合,它和我们之前学到的函数一样,可以接收输入参数,也可以返回输出参数给调用者,返回计算结果。...原创 2022-06-29 01:47:03 · 1022 阅读 · 0 评论 -
【SQL语法基础】视图在SQL中的作用是什么,它是怎样工作的?
使用视图有很多好处,比如安全、简单清晰。原创 2022-06-28 20:27:39 · 2729 阅读 · 0 评论 -
【SQL语法基础】SQL99是如何使用连接的,与SQL92的区别是什么?
我们在进行连接的时候,使用的关系型数据库管理系统,之所以存在关系是因为各种数据表之间存在关联,它们并不是孤立存在的。在实际工作中,尤其是做业务报表的时候,我们会用到 SQL 中的连接操作(JOIN),因此我们需要理解和熟练掌握 SQL 标准中连接的使用,以及不同 DBMS 中对连接的语法规范。剩下要做的,就是通过做练习和实战来增强你的经验了,做的练习多了,也就自然有感觉了。......原创 2022-06-27 22:17:19 · 1293 阅读 · 0 评论 -
【SQL语法基础】常用的SQL标准有哪些,在SQL92中是如何使用连接的?
SQL92 和 SQL99 是经典的 SQL 标准,也分别叫做 SQL-2和 SQL-3 标准。也正是在这两个标准发布之后,SQL 影响力越来越大,甚至超越了数据库领域。现如今 SQL 已经不仅仅是数据库领域的主流语言,还是信息领域中信息处理的主流语言。在图形检索、图像检索以及语音检索中都能看到SQL 语言的使用。......原创 2022-06-27 21:50:34 · 839 阅读 · 0 评论 -
【SQL语法基础】子查询:子查询的种类都有哪些,如何提高子查询的性能?
SQL 中,子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。.........原创 2022-06-27 02:26:14 · 2345 阅读 · 0 评论 -
【SQL语法基础】NBA 球员数据库
player 表为球员表,team 为球队表,team_score 为球队比赛表,player_score 为球员比赛成绩表,height_grades 为球员身高对应的等级表。原创 2022-06-27 02:20:09 · 1872 阅读 · 0 评论 -
【SQL语法基础】什么是SQL的聚集函数,如何利用它们汇总表的数据?
另外需要注意的是,使用 GROUP BY 进行分组,如果想让输出的结果有序,可以在GROUP BY 后使用 ORDER BY。因为 GROUP BY 只起到了分组的作用,排序还是需要通过 ORDER BY 来完成。原创 2022-06-26 22:34:12 · 676 阅读 · 0 评论 -
【SQL语法基础】什么是SQL函数?为什么使用SQL函数可能会带来问题?
函数对于一门语言的重要性毋庸置疑,我们在写 Python 代码的时候,会自己编写函数,也会使用 Python 内置的函数。在 SQL 中,使用函数的时候需要格外留意。不过如果工程量不大,使用的是同一个 DBMS 的话,还是可以使用函数简化操作的,这样也能提高代码效率。只是在系统集成,或者在多个 DBMS 同时存在的情况下,使用函数的时候就需要慎重一些。......原创 2022-06-26 02:40:07 · 783 阅读 · 0 评论 -
【SQL语法基础】数据过滤:SQL数据过滤都有哪些方法?
你可能认为学习 SQL 并不难,掌握这些语法就可以对数据进行筛选查询。但实际工作中不同人写的 SQL 语句的查询效率差别很大,保持高效率的一个很重要的原因,就是要避免全表扫描,所以我们会考虑在 WHERE 及 ORDER BY 涉及到的列上增加索引。......原创 2022-06-26 00:21:57 · 4981 阅读 · 0 评论 -
【SQL语法基础】检索数据:你还在SELECT * 么?
在我们的日常工作中,很多人都可以写出 SELECT 语句,但是执行的效率却相差很大。产生这种情况的原因主要有两个,一个是习惯的培养,比如大部分初学者会经常使用`SELECT *`,而好的习惯则是只查询所需要的列;另一个对SQL 查询的执行顺序及查询效率的关注,比如当你知道只有1 条记录的时候,就可以使用LIMIT 1来进行约束,从而提升查询效率。............原创 2022-06-25 22:21:53 · 725 阅读 · 0 评论 -
【SQL语法基础】王者荣耀英雄数据表
heros,heros_data_with_structure,heros_play,heros_temp。原创 2022-06-25 22:26:01 · 1628 阅读 · 0 评论 -
【SQL语法基础】使用DDL创建数据库&数据表时需要注意什么?
在创建数据表的时候,除了对字段名及数据类型进行定义以外,我们考虑最多的就是关于字段的约束,我介绍了 7 种常见的约束,它们都是数据表设计中会用到的约束:主键、外键、唯一性、NOT NULL、DEFAULT、CHECK 约束等。当然,了解了如何操作创建数据表之后,你还需要动脑思考,怎样才能设计出一个好的数据表?设计的原则都有哪些?针对这个,我整理出了“三少一多”原则,在实际使用过程中,你需要灵活掌握,因为这个原则并不是绝对的,有时候我们需要牺牲数据的冗余度来换取数据处理的效率。.........原创 2022-06-25 18:05:22 · 1108 阅读 · 0 评论 -
【SQL语法基础】学会用数据库的方式思考SQL是如何执行的
Oracle 提出了共享池的概念,通过共享池来判断是进行软解析,还是硬解析。而在 MySQL 中,8.0 以后的版本不再支持查询缓存,而是直接执行解析器→优化器→执行器的流程,这一点从 MySQL 中的 show profile 里也能看到。同时 MySQL 的一大特色就是提供了各种存储引擎以供选择,不同的存储引擎有各自的使用场景,我们可以针对每张表选择适合的存储引擎。...原创 2022-06-25 17:38:05 · 134 阅读 · 0 评论 -
【SQL语法基础】DBMS的前世今生
如果说不同的 DBMS 代表了不同公司的利益,那么作为使用者的我们更应该注重的是这些DBMS 的使用场景。比如 Oracle 作为市场占有率最高的商用数据库软件,适合大型的跨国企业,而针对轻量级的桌面数据库,我们采用 Access 就可以了。对于免费开源的产品来说,可以选用 MySQL 或者 MariaDB。同时在 NoSQL 阵营中,我们也需要了解键值型、文档型、搜索引擎、列式数据库和图形数据库的区别。...原创 2022-06-22 23:41:18 · 587 阅读 · 0 评论 -
【SQL语法基础】了解SQL:一门半衰期很长的语言
SQL 的价值在于通用性强(市场需求普遍),半衰期长(一次学习终身受用),入门不难。原创 2022-06-22 23:22:38 · 125 阅读 · 0 评论 -
【SQL】SQL可能是你掌握的最有用的技能
如果你是一名程序员,那么会用 SQL 无疑是你的基本技能;如果你是产品经理或者运营人员,那么 SQL 将会为你打开一个全新的世界,让你从不一样的视角看待数据,利用数据。我希望这个专栏可以带你走进 SQL 的世界,让你掌握它的基础语法,学会分析性能问题,一步步精通 SQL。这时你会发现,原本毫无规则、抽象的数据仿佛一下子具象了,变得会说话了,它会告诉你数据之间彼此的关联、背后所代表的含义……......原创 2022-06-22 23:06:17 · 487 阅读 · 0 评论