- 博客(994)
- 资源 (11)
- 问答 (4)
- 收藏
- 关注
原创 《Drools 规则引擎视频教程》相关事宜
非常感谢大家能够有时间来看这篇博客,本篇博客主要介绍一下最近本人正在致力于的Drools 7 规则引擎文档和视频教程相关事项。Drools 本身在国内的技术网站上的资料就比较少,最近的视频教程更是几乎没有。本人最近一段时间正在致力于文档编写(已经完成过半)和视频的录制。同时,博客的编写发表也在同步进行。后期会根据项目中的时间录制实战教程。欢迎大家多多支持。文档、博客、Github代码完全免费开放,视
2017-08-12 10:38:45
13856
15
原创 MySQL中的字符集与排序规则
定义列的字符集有几种方式。如果你没有在表或列级别指定字符集,服务器默认的utf8mb4字符集将被应用(除非你明确声明了一个不同的服务器或数据库默认设置)。生成的你可以显式地在表级别设置字符集,通过使用CHARSET=[字符集]语法。例如,这里我们创建一个所有字符列都使用latin1你也可以在列级别设置字符集。通过运行可以看到表的默认字符集是utf8mb4,但是显式设置的列使用了latin1列级别的声明将覆盖表级别的声明,表级别的声明将覆盖数据库默认,数据库默认的字符集覆盖服务器默认。
2025-11-20 07:46:10
756
原创 在MySQL中,是否可以使用UUID作为主键?
在 MySQL 中使用 UUID 主键在分布式系统中可以几乎确保唯一性;然而它也带来了显著的权衡。幸运的是,通过多个版本的 UUID 以及其替代选项,可以找到更好应对这些权衡的方法,可根据具体的业务场景来选择更好的实践方案。
2025-11-06 08:04:19
711
原创 MySQL的隔离级别及其工作原理详解
MySQL的隔离级别是四种模式中的一种,用于控制MySQL会话在执行并发事务时应如何表现。隔离级别直接与ACID数据库的隔离性要求相关,该要求规定事务的执行方式不应影响其他事务。根据对会话设置的隔离级别,MySQL使用各种锁机制来管理事务在任何时间点对哪些数据有访问权限。这也决定了在并发事务运行时可能出现的各种异常(违例)。简单了解了MySQL隔离级别的定义及其优势后,我们将进一步看看不同的隔离级别、事务、违例、锁及它们之间的关联。
2025-11-04 08:07:03
771
原创 MySQL的数据库事务、ACID特性以及实战案例
数据库事务是数据库中一个操作单元,包含一组被整体执行和写入的多个数据操作。这些操作可以包括创建(Create)读取(Read)更新(Update)或删除(Delete)操作。事务过程中的数据处于不一致的状态,因为事务正在对数据库进行修改。一旦事务中的所有操作被**提交(Commit) **,数据库就会恢复到一致的状态。通俗的讲,在一个数据库事务中的一个或多个SQL操作,要么都执行成功,要么都执行失败。数据库事务在确保多个操作同时执行时数据库的一致性方面非常重要。
2025-11-01 10:53:23
994
原创 数据库的分片与分区:有什么区别?
分片(Sharding),也被称为水平分区(Horizontal Partitioning),是一种数据库拆分技术,其核心思想是将数据进行水平切分,将大型数据库拆分成多个更小、更易管理的部分,并分布到不同的实例或服务器上,从而提升系统的性能和扩展能力。实施分片后,数据库会根据**分片键(Shard Key)**将数据划分到不同的分片中。分片键是一个特殊的逻辑标识符,通常挑选为能够有效区分和分布数据的字段,决定数据被存储在哪个具体的分片中。
2025-10-31 07:52:00
1068
原创 什么是OLTP ,MySQL是如何支持OLTP的?
OLTP,在线事务处理)是一种数据库应用场景,主要用于频繁的、快速的事务处理。高并发性:同时支持大量用户的并发事务请求。低延迟:要求快速响应用户请求,通常在毫秒级完成写入和读取操作。小数据量:针对的通常是小范围数据的读写操作,记录通常是逐条操作而不是批量处理。事务处理:支持 ACID(原子性、一致性、隔离性、持久性)操作,确保数据一致性,即便出现故障,也能保证数据不丢失、不破坏。CRUD操作频繁。
2025-10-29 20:20:51
989
1
原创 一张图解析MySQL中InnoDB的逻辑存储结构
在《》这篇文章中,我们对比了MyISAM和InnoDB两个存储引擎,这篇文章更深层次的讲解一下InnoDB的逻辑存储结构都包含哪些部分,每一部分都是什么功能,以及它们之间的层级关系。
2025-10-28 07:30:02
866
原创 详解MySQL两种存储引擎MyISAM和InnoDB的优缺点
存储引擎是一种管理和存储数据的基础组件,决定了数据库系统如何处理数据的存储、索引、查询等操作。它负责数据的读写、事务管理、锁机制处理等重要功能。数据库的存储引擎可以理解为具体实现“数据如何存和取”的模块,在数据库系统中,它是一个非常关键的部分。在 MySQL 中,存储引擎是模块化的,不同存储引擎具备不同的特性,不同的存储引擎适合不同的场景。用户可以根据具体业务需求选择合适的存储引擎。在MySQL5.5版本之前,采用MyISAM作为默认数据存储引擎。
2025-10-26 19:51:00
376
原创 在MySQL中,一条SQL语句的执行全流程是怎样的?
在《》这篇文章中,我们讲解了MySQL的整体架构。那么,你是否有过类似的疑问:一条查询的SQL语句的底层到底是如何执行的?这篇文章,我们在MySQL的整体架构的基础上,进一步详细讲解一条SQL语句在此架构中的运行过程。
2025-10-23 20:44:29
664
原创 MySQL的整体架构及功能详解
在前面的系列文章中,我们讲解了MySQL基础功能相关的知识,在这篇文章中,重点讲讲MySQL的整体架构,以便在后续的学习中更好的了解所讲的功能属于MySQL的哪一部分,以及前后相关的工作流程。
2025-10-22 07:29:17
584
原创 什么是MySQL JOIN查询的驱动表和被驱动表?
驱动表是 MySQL 优化器选择的优先查询的表。查询先从驱动表中检索数据,再根据驱动表的结果与被驱动表进行关联。驱动表通常记录较少、匹配数据更精准,或能利用索引高效查找的数据表。
2025-10-19 13:57:41
811
原创 什么是MySQL分区?
当数据库服务器因日常使用性能开始下降时,有多种优化选项可以帮助改善性能。一种常见的MySQL数据库优化方法是。本文将介绍MySQL分区的基础知识,如何在数据库中应用分区,以及它与的关系。
2025-10-16 20:29:28
954
原创 实战技巧:使用冗余查询条件解锁MySQL中的索引
在使用 MySQL(或者任何其他数据库)时,了解索引的工作原理以及它们如何改善查询效率是至关重要的。索引是一种独立的数据结构,它维护了部分数据的副本,并通过结构化的方式实现快速数据检索。通常,这种结构是一个 B+ 树。关于B+树可参考《》一文。
2025-10-16 20:27:53
292
原创 为什么要尽量将MySQL表字段要设置为NOT NULL?
在Yearning这样的SQL审计平台中也有类似的规则。同样的问题,也会经常出现在数据库相关的面试当中。今天这篇文章我们从性能优势、开发友好性等方面来深入了解这一优化建议背后的初衷和原理。
2025-10-15 20:43:15
860
原创 如何选择合适的数据库?PostgreSQL与MySQL各项对比
首先,我们快速了解一下 PostgreSQL 和 MySQL 的定义,以便熟悉这两个关系型数据库管理系统。PostgreSQL,简称 Postgres,是一种广泛使用的关系型数据库管理系统(RDBMS),常用于存储和检索在数据库和表中组织的表格数据。Postgres 因其可扩展的框架和可靠性而备受行业信赖。Postgres 是一款开源工具,可免费下载安装和使用。它兼容所有主流操作系统,并支持许多扩展和插件。除了用作数据存储工具外,Postgres 提供了一种 SQL 方言,用于交互和管理其持久化的数据。
2025-10-13 20:53:57
996
原创 在连表查询场景下,MySQL隐式转换存在的坑
隐式类型转换在表连接中可能导致索引失效并影响执行效率。解决方式包括统一字段类型、使用优化器提示或强制索引等方法。这也提示我们在实践的过程中,表连接字段的类型应尽量保持一致,避免隐式类型转换。
2025-10-12 09:20:04
432
原创 MySQL“索引失效”的隐形杀手:隐式类型转换,你了解多少?
MySQL中的隐式类型转换规则是在查询或操作(如比较、函数调用等)中,涉及到不同数据类型时发生的自动转换行为。如果参与操作的表达式或列的数据类型不匹配,MySQL会根据数据类型的上下文自动进行数据类型转换以适配预期的数据类型。这种行为对性能和结果有时会有较大的影响,比如索引可能失效或比较结果出现意外。
2025-10-10 20:33:43
987
原创 MySQL中,IS NULL和IS NOT NULL不会走索引?错!
最近写了一系列关于MySQL索引相关的文章,帮大家系统全面地把索引这块的知识丰富串联起来,需要回顾或学习这方面的知识的朋友可以看看前面的文章。今天这篇文章给大家分析和示例一下,MySQL中,当查询条件为IS NULL或时,哪些情况会走索引,哪些情况下又不会走索引。最终结论可能与大家的直觉有所不同。这篇文章会涉及到前面讲到的B+树相关的知识,请参考《》一文。下面我们直接通过具体的实例来看看当查询条件为IS NULL或时,索引的使用情况。
2025-10-09 20:47:07
440
原创 MySQL中,日期、时间与时间戳三种数据类型的区别
在 MySQL 中存储日期和时间有几种不同的方法,想要选择正确的方式就需要大家理解要存储的数据类型以及 MySQL 如何处理这些数据类型。这篇文章就带大家梳理一下MySQL的这些日期与时间的类型。
2025-10-08 09:51:42
822
原创 MySQL的OR条件查询不走索引及解决方案
在 MySQL 中,OR条件查询是一种利用OR逻辑操作符在WHERE子句中连接多个条件的查询方式。当查询中使用OR操作符时,只要其中任何一个条件满足就会返回对应的数据行。它是一种常见的逻辑运算,用于实现灵活的数据筛选。OR条件查询经常用于:多字段查询、联合范围查询、动态筛选等场景。其中,在多字段查询的场景下,需要特别留意是否会出现不走索引的情况,下面我们来详细介绍一下这种情况及解决方案。查询条件使用OR且部分字段没有索引时,MySQL 很可能会选择执行全表扫描,而不是使用索引。
2025-10-08 08:51:55
943
原创 面试中,如何筛选合格的人才?
作为面试官,应该给应聘者一个自我介绍机会。对于整个面试过程,这个自我介绍,看似比较虚,但却有着两方面重要的作用。第一,这属于暖场阶段,缓解一下应聘者的紧张感。第二,作为面试官,也能够快速了解应聘者的基本情况,特别是二面、三面,能够有时间简单浏览一下面试者的个人信息及项目信息等。在这个阶段,应聘者往往会犯一个错误,那就是没有准备自我介绍。大多数情况下,自我介绍是一个必不可少的环节,如果没有准备,就会出现自我介绍没有逻辑,没有重点。
2025-10-07 10:16:48
885
原创 一篇文章详解你不知道的MySQL JSON数据类型
MySQL从5.7版本开始正式支持JSON数据类型,MySQL 8.0又丰富了JSON函数集,加入了更强大的功能例如(将JSON数据动态映射为关系型表)。JSON类型的数据以二进制格式存储,称为,相比明文字符串格式更高效,支持快速访问和解析。这种存储方式允许直接访问嵌套的属性,不需要将整个JSON字符串加载到内存中进行解析。MySQL提供一系列原生的JSON函数,允许对JSON内容进行查询、修改和操作。:提取JSON数据中的特定字段。JSON_SET():更新JSON数据中的某些字段。
2025-10-06 09:58:21
499
原创 MySQL的联合索引以及其最左前缀原则
联合索引(Composite Index),也称为多列索引或复合索引,是一种包含多个列的单个索引。它是为了优化多列查询的性能而创建的。在表中创建联合索引可以帮助MySQL根据实际查询条件快速定位数据。在上述示例中,在name和age两个字段上创建了联合索引。该索引不仅可以加速基于name和age的查询,还能在某些情况下加速单列查询。联合索引的核心原理是根据索引的顺序将多个字段的数据进行组合存储。当查询中的条件与联合索引的列顺序一致时,数据库可以直接利用索引进行查找,大大提高查询性能。多列查询频繁。
2025-10-05 09:54:59
899
原创 三种常见的MySQL数据库设计最佳实践
曾经有一位开发者说过一句话,很有道理:一个功能的实现,在数据量或并发量比较小的时候,怎么样都可以,但一旦将数据量和并发量逐步扩大,问题就会逐步显现出来了。这篇文章,就带大家梳理一下,在MySQL的数据库表设计中常见的三类错误。
2025-10-04 13:35:53
811
原创 MySQL中的数据去重,该用DISTINCT还是GROUP BY?
在日常工作中,数据库查询操作无处不在,而处理数据中的重复项与分组汇总是非常常见的需求。和GROUP BY。这两者虽然在生成输出上可能相似,但用途与性能各有不同,使用场景也有所区分。这篇文章带大家将从功能、性能以及实际应用等方面详细介绍DISTINCT和GROUP BY的差异,并结合具体的示例数据来理解其使用场景。
2025-09-27 20:03:17
799
原创 MySQL的两种分页方式:Offset/Limit分页和游标分页
分页方式的选择需依据具体应用场景与性能要求。如果你的应用允许宽松的精确度或需要支持随机页面访问,Offset/Limit分页可能是不错的选择。然而对于深度分页或大数据场景,游标分页表现更为优秀,尤其是在动态数据集上避免了数据漂移问题。两者并无绝对优劣,最重要的是根据业务需求选择最适合的实现方式。
2025-09-27 12:06:13
1040
原创 为什么MySQL索引不生效?来看看这8个原因
索引优化涉及多个方面,包括查询优化器运作、数据分布、索引结构等。了解索引未生效的原因并合理优化查询,可以显著提升数据库性能。索引虽强大,但只有正确规划和使用才能发挥最大效用。
2025-09-25 10:37:07
358
原创 什么是MySQL的索引下推(Index Condition Pushdown, ICP)?
索引下推(Index Condition Pushdown, ICP)是数据库查询优化的一种技术。它主要用于提升数据库查询性能,尤其是顺序扫描大表或使用索引进行过滤时。索引下推在 MySQL 5.6 引入,是针对索引的查询优化。
2025-09-24 10:27:35
299
原创 学习中的飞轮效应:如何快速学习一门知识?
而自己学习和梳理MySQL知识的过程,其实很简单,就是一个知识点,会搜索至少十篇以上的文章,逐篇阅读,在阅读的过程中配合GPT,来了解文章中所涉及到的其他概念,以及让GPT确认和核实文章的内容上是否有错误。就这样,十多篇文章读下来,一个知识点通过不同的视角得到的讲解,同时,它所延伸及相关的知识点在各篇文章中,以及GPT的问答中,逐步建立起了一个知识图谱。突然发现,这事就很有意思,当读的书越多,建立的知识节点就越多,无论对新知识的理解,还是对已有知识的巩固,都能够形成规模效益,形成飞轮效应。
2025-09-23 09:29:30
407
原创 MySQL中什么是回表查询,如何避免和优化?
回表查询(Table Lookup或Back to Table)是数据库查询中的一个过程,指在使用非聚集索引(Secondary Index或Non-Clustered Index)定位数据时,由于索引节点中不包含查询所需的全部列,数据库需要根据索引找到数据行的位置(通常是主键或行标识符),然后回到聚集索引或数据表中读取完整的数据行。这种行为通常发生在查询的字段未被索引覆盖,索引不足以直接满足查询需求时。
2025-09-18 21:18:21
805
原创 如何在MySQL中创建聚集索引?
聚集索引并不是一种单独的索引类型,而是表中的记录按照索引的顺序存储。在MySQL的InnoDB存储引擎中,聚集索引与表的物理存储顺序紧密相关。一个表只能有一个聚集索引,其他所有的索引被称为辅助索引(Secondary Index)。当通过辅助索引检索数据时,数据库会先通过辅助索引找到对应的记录指针,然后再访问聚集索引以取回完整的行数据。MySQL中聚集索引的创建和选择由表结构定义决定。在InnoDB存储引擎中,主键、唯一索引或隐式定义的索引都会作为表的聚集索引。
2025-09-17 08:37:14
919
原创 学习MySQL绕不开的两个基础概念:聚集索引与非聚集索引
MySQL索引分为聚集索引和非聚集索引两种重要类型。聚集索引决定数据物理存储顺序,一个表只能有一个,叶子节点直接存储数据行,适合主键和范围查询,但写入性能可能受影响。非聚集索引独立于数据存储,叶子节点保存键值和指针,适合辅助查询列和多列查询,但查询时需要额外跳转。合理选择索引类型能显著提升查询性能,聚集索引适合主键和高频范围查询,非聚集索引则适合辅助列查询且不改变数据存储顺序的场景。
2025-09-16 20:35:31
505
原创 仅仅会用MySQL的EXPLAIN还不够,还需要会用EXPLAIN ANALYZE
在 MySQL 8.0.18 中,MySQL 引入了 EXPLAIN ANALYZE,一个在常规 EXPLAIN 查询计划工具之上的新功能。除了列出查询计划和估算的成本,EXPLAIN ANALYZE 还打印了执行计划中各个迭代器的实际成本。示例EXPLAIN ANALYZE语句:注意事项:EXPLAIN ANALYZE 实际上会运行查询,因此如果你不希望查询在实时数据库上运行,请不要使用 EXPLAIN ANALYZE。估算的执行成本(一些迭代器未被成本模型纳入,因此在估算中未包含它们)
2025-09-15 10:26:45
1024
原创 创建数据库索引时,要考虑一下这5个维度
数据库索引是帮助提升查询性能的核心工具,尤其在处理复杂查询时(如JOINGROUP BYWHERE或ORDER BY操作),能够显著减少查询时间。索引的工作原理简单而高效:通过以不同的顺序存储部分数据的副本,快速定位目标数据,类似于书籍中的目录可以迅速找到某一章节的内容。尽管索引在提高查询效率方面具有显著优势,但并不是每个表的每一列都需要索引,因为过多索引特别是可能会引发意想不到的问题。
2025-09-13 09:06:19
426
原创 数据库之必备经验视角:什么是N+1查询问题?
文章摘要: N+1查询问题指应用中先执行1次主查询获取记录列表,再对每个记录执行N次单独查询,导致性能瓶颈。多个小查询的延迟和数据库负担远高于单次复杂查询。通过JOIN优化可将N+1次查询合并为1次,显著提升性能(如800条数据从1秒降至0.16秒)。对于复杂需求,可结合GROUP BY聚合查询或构建嵌套数据结构,既避免N+1问题,又优化数据访问效率。该优化是数据库性能调优的核心策略之一。
2025-09-12 07:31:24
721
原创 一篇文章全面重温MySQL的join操作
MySQL连接操作详解:从基础到实践 本文系统介绍了MySQL中的各类连接操作(Join),包括内连接、左连接、右连接和外连接。首先通过创建商品(items)和类别(categories)两个示例表,展示了如何建立表间关系。重点讲解了内连接(INNER JOIN)的用法及常见错误,特别是未指定ON条件导致的交叉连接问题。随后深入探讨了左连接(LEFT JOIN)和右连接(RIGHT JOIN)的特性,通过实际数据对比了不同连接方式的查询结果差异。文章强调正确使用连接条件和表别名的重要性,并提供了优化查询性能
2025-09-11 07:59:01
318
原创 在职场,尽量不要成为这样的“人才”
这个反面案例既有大厂将员工当螺丝钉培养的制度问题(为了效率和可替代性),也有躬身入局的“牛马们”只顾吃草,不抬头看看草原是否已经枯竭,猛兽是否已经接近,是否应该培养其他进食途径或寻找更辽阔的草原的自我规划问题。在后续聊天中,他问,最近听说有很多大厂都在裁员(寻找同类,以获得自我心理的安慰),你们招聘的人是不是遇到很多,这也做了侧面印证。当时聊到接口测试,问他为什么没有相关经验,他说,这些有专门的团队在做,他接触不到。案例,道理,方法,其实我们都知道,缺少的只是行动,持之以恒的行动,哪怕是每天只进步一点点。
2025-09-10 13:38:46
449
原创 如何为MySQL中的JSON字段设置索引
MySQL引入了JSON数据类型,但无法直接对JSON列建立索引。文章介绍了两种间接索引JSON字段的方法:对于MySQL 5.7,需创建生成列(Generated Column)并对其建立索引;从MySQL 8.0.13开始,可直接创建函数索引(Functional Index),但需注意类型转换和字符集问题。通过示例演示了如何索引JSON文档中的特定字段,并验证索引的使用情况。这两种方法不仅适用于JSON,也可用于其他复杂数据模式的索引需求,有效解决了MySQL中JSON数据的索引难题。
2025-09-09 08:06:43
4354
原创 MySQL中COUNT(\*)、COUNT(1)和COUNT(column),到底用哪个?
本文探讨了在SQL查询中使用COUNT函数的性能差异和最佳实践。通过分析MySQL官方文档和权威资料,得出明确结论:COUNT()与COUNT(1)性能相同,且优于COUNT(主键)和COUNT(非主键列)。COUNT()是SQL92标准语法,会统计包含NULL值的行,而COUNT(列名)只统计非NULL值。建议优先使用COUNT(*)获取表行数,既语义清晰又性能优越。同时应避免误用COUNT(column)统计行数,除非确实需要统计某列的非空值数量。这一结论在阿里巴巴开发手册中也有明确说明。
2025-08-04 20:06:20
917
dubbo因服务器关闭导致本地启动抛异常
2015-01-08
两个Long类型相乘溢出怎么解决
2013-08-07
Maven打包替换类变量问题
2015-11-26
tomcat 配置 编码方式后,重新启动 配置还原
2012-12-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅