数据库技术
文章平均质量分 65
以实战为线索,偶尔记录并分享我在数据库使用上遇到的问题及解决方案,并非系统性专栏,感兴趣的同学可以关注哈。
YahirQ
你好,我是YahirQ,一个写了十年代码的“老”程序员。
我的技术地图有点广:以 .NET 为根据地,也曾远征 Java、C++、Python 的江湖,并用 Vue、SQL 和 iOS 开发过不少应用。这些经历让我明白,技术之道,万变不离其宗。
而现在,我选择了一条“向下扎根”的道路——嵌入式开发。我着迷于代码如何直接驱动硬件,享受在资源受限的环境下创造价值的乐趣。这对我而言,是一个全新的起点。
在这里,我将以一个“资深新手”的视角,记录并分享从传统软件到嵌入式世界的转型之路。我的文章会力求通俗易懂,既有硬核的代码分析,也有踩坑填坑的实战记录。期待能与志同道合的你一起学习,共同成长!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DBeaver 跨库数据迁移实战:如何用“导出”功能实现测试表数据的全量覆盖
本文介绍了使用DBeaver的"导出数据"功能实现跨库数据迁移的完整流程。核心步骤包括:在源表右键选择"导出数据"→目标类型选"数据库"→映射到测试库的目标表→选择"已存在"操作模式。关键注意点是:必须确保两库表结构完全一致,且需要手动清空目标表(TRUNCATE/DELETE)才能实现全量覆盖,否则DBeaver默认执行数据追加操作。文章还提供了批量操作、性能优化和验证建议,强调迁移前应检查表结构一致性,大数据量需分批次处理。通过"导出+清空"的组合操作,可以安全高效地完成生产环境到测试环境的数据同步。原创 2026-06-30 13:20:12 · 178 阅读 · 0 评论 -
VictoriaLogs:高性能、低成本、易运维的下一代日志数据库
VictoriaLogs是一款面向云原生时代的高性能日志数据库,由VictoriaMetrics团队开发。它采用LogJSON格式存储日志,压缩率高达5%-15%,相比Elasticsearch可节省50-100倍存储成本。核心优势包括:单核100MB/s的写入吞吐、无外部依赖的极简架构、专为日志优化的LogsQL查询语言,以及自动化的生命周期管理。相比Loki和Elasticsearch,VictoriaLogs在存储成本、查询性能和运维复杂度方面表现更优,特别适合资源受限或需要简化运维的场景。通过单一二原创 2026-04-14 22:02:57 · 742 阅读 · 0 评论 -
深入解析:VARCHAR 字段的 B-Tree 索引在模糊查询中的行为
本文分析了B-Tree索引在不同模糊查询模式下的表现,重点探讨了VARCHAR字段上的LIKE查询优化。B-Tree索引仅支持前缀匹配查询(LIKE 'prefix%'),对后缀(LIKE '%suffix')和包含(LIKE '%substring%')查询无效。文章比较了MySQL和PostgreSQL的具体实现差异,并提供了优化建议:使用全文索引、三元组索引、反向索引或搜索引擎等替代方案。核心结论是B-Tree索引对模糊查询的支持有限,开发人员应根据业务需求选择合适的索引类型。原创 2026-03-31 19:14:11 · 517 阅读 · 0 评论 -
PostgreSQL 中的 pg_trgm GIN 索引详解
PostgreSQL 的 pg_trgm GIN 索引详解:该扩展基于 trigram(三元组)模型,通过将字符串分解为连续三字符序列并建立 GIN 倒排索引,显著提升 LIKE、ILIKE、正则表达式和相似度搜索的性能。索引支持中缀模糊匹配(如 '%abc%')和相似度排序(ORDER BY col <-> 'query'),但对短模式(<3字符)无效且索引体积较大。创建方法简单(CREATE INDEX...USING GIN(col gin_trgm_ops)),适用于文本搜索场景,原创 2026-03-30 20:28:58 · 663 阅读 · 0 评论 -
MongoDB 是什么?
MongoDB是一个开源的NoSQL文档型数据库,采用BSON格式存储数据,具有灵活的模式设计和高性能特性。其核心概念包括数据库、集合和文档,支持嵌入式文档和数组结构。主要特性涵盖高可用性(副本集)、水平扩展(分片)、丰富查询语言和聚合框架等。MongoDB适用于内容管理、实时分析等场景,但不适合强事务系统。相比关系型数据库,它具有更灵活的数据模型和更好的扩展性,但事务支持和复杂关联查询较弱。基本操作通过mongo shell完成,开发效率高但需要合理设计数据模型。原创 2026-02-22 14:10:46 · 868 阅读 · 0 评论 -
在 PostgreSQL 中存储 GUID 时,用 uuid 字段 和 string 字段的区别?
PostgreSQL中存储GUID时,uuid类型相比字符串类型(varchar/char)具有显著优势:占用固定16字节存储空间(字符串需36+字节),索引性能更优(条目更小),自动验证数据格式,并提供专用函数支持。uuid类型在网络传输中也仅需16字节二进制数据。最佳实践推荐优先使用uuid类型,特别是作为主键/外键或需要高性能查询时。仅在需要兼容外部系统特殊格式等特殊情况下才考虑使用字符串类型。性能测试表明uuid类型的存储和查询效率通常比字符串类型高20-40%。原创 2025-12-28 14:43:47 · 347 阅读 · 0 评论 -
DBeaver + PostgreSQL 中的 Global Backup 和 Backup 的区别?
DBeaver中PostgreSQL的Backup与Global Backup核心区别在于备份范围:Backup针对单个数据库,使用pg_dump工具备份特定数据库对象;Global Backup则针对整个数据库集群,通过pg_dumpall备份所有数据库及集群级对象(用户、权限等)。前者适用于日常单库备份迁移,后者用于全实例灾难恢复。选择依据取决于需要备份的范围:单库操作选Backup,全实例迁移或用户权限备份选Global Backup。原创 2025-12-06 18:28:05 · 1211 阅读 · 0 评论 -
SQL中的函数索引/表达式索引
本文介绍了SQL中的函数索引/表达式索引概念。函数索引针对表达式(包含列的函数处理或计算)创建,而非直接对列值创建。它能提升包含函数/表达式的查询性能,并可用于强制数据完整性。文章对比了普通索引与函数索引的特点,并以PostgreSQL、MySQL和Oracle为例展示了具体语法。注意事项包括维护开销、查询需精确匹配索引表达式、数据库支持差异等。函数索引适用于优化频繁执行的复杂条件查询,但需权衡其额外维护成本。原创 2025-11-06 19:28:04 · 655 阅读 · 0 评论 -
主键索引和唯一性索引的区别与联系
主键索引与唯一性索引的核心区别在于约束特性和索引类型。主键索引强制非空且唯一,一个表只能有一个,通常作为聚集索引决定数据物理存储顺序;唯一性索引允许NULL值,可创建多个,默认为非聚集索引。主键索引更强调实体完整性,适合作为行唯一标识;唯一性索引侧重业务规则约束和查询优化。选择时,若需唯一标识且优化主键查询用主键索引,若需保证字段唯一性则用唯一性索引。原创 2025-10-04 20:25:04 · 979 阅读 · 0 评论 -
数据库事务中的脏读、不可重复读、幻读
数据库并发事务中的脏读、不可重复读和幻读是三种常见问题,它们的区别在于: 脏读指读到其他事务未提交的修改; 不可重复读指同一事务内两次读取同一数据结果不同(由更新引起); 幻读指同一事务内两次查询结果集数量不同(由插入/删除引起)。 不同隔离级别可解决不同问题:读已提交防脏读,可重复读防脏读和不可重复读,可序列化可防所有问题。MySQL的可重复读通过MVCC和Next-Key Locking机制还能有效防止幻读。原创 2025-09-29 22:18:40 · 1021 阅读 · 0 评论 -
数据库事务(Transaction)的概念及其底层实现原理
数据库事务是DBMS中保证数据操作可靠性的核心机制,具有ACID特性(原子性、一致性、隔离性、持久性)。其底层实现依赖日志系统(Redo Log确保持久性,Undo Log实现原子性)和并发控制技术(锁机制和MVCC)。Redo Log记录物理修改用于崩溃恢复,Undo Log保存数据旧版本支持回滚和MVCC。隔离性通过锁(悲观控制)和MVCC(乐观控制)实现,后者利用事务ID和Read View提供一致性读视图。这些机制协同工作,确保事务的可靠执行和数据一致性。原创 2025-09-28 22:24:58 · 1603 阅读 · 4 评论 -
数据库所有种类的索引?
数据库索引主要分为四类:数据结构类(B树/B+树、哈希、全文、R树、位图索引)、物理存储类(聚集/非聚集索引)、逻辑功能类(主键、唯一、普通、复合、覆盖索引)和特殊类型(函数、部分、倒排索引)。B+树是MySQL默认索引,哈希索引适合等值查询,聚集索引与数据物理顺序一致。不同数据库支持的索引类型有所差异,合理选择索引可显著提升查询性能。原创 2025-08-17 13:02:26 · 285 阅读 · 0 评论 -
对视图进行条件查询,索引还会生效吗?
视图查询能否利用索引取决于视图类型和查询条件。简单视图和物化视图通常能利用基表索引,而包含聚合、计算列或复杂操作的视图可能无法有效使用索引。优化建议包括:确保基表索引、使用物化视图、分析查询计划,以及将条件直接下推到基表。不同数据库系统对此处理存在差异,需参考具体文档。(149字)原创 2025-07-23 18:00:00 · 373 阅读 · 0 评论 -
SQL 中 JOIN 顺序对性能的影响
SQL JOIN 顺序确实影响查询性能,但现代数据库优化器通常能自动选择最优顺序。关键影响因素包括表大小差异、索引可用性和连接类型。当优化器统计信息不准确或查询特别复杂时,手动调整JOIN顺序可能提升性能:优先连接过滤后结果集小的表,确保JOIN列有索引,并使用EXPLAIN分析执行计划。不同数据库系统提供特定优化手段,如PostgreSQL的Leading提示或MySQL的STRAIGHT_JOIN。最佳实践是首先依赖优化器,仅在确认性能问题时才考虑手动优化JOIN顺序。原创 2025-07-22 15:00:00 · 589 阅读 · 0 评论 -
PostgreSQL 中的字段,遇到不等于操作时,索引未命中,如何优化
PostgreSQL中针对"不等于"操作索引失效的优化方案包括:1)查询重写为范围查询或NOT IN;2)创建部分索引(Partial Index)针对特定排除值;3)使用布尔表达式索引;4)构建覆盖索引包含查询列;5)对排除值进行表分区;6)使用Bloom过滤器等多列索引。关键优化策略需结合数据分布分析(通过GROUP BY检查)和EXPLAIN ANALYZE验证索引使用情况,同时考虑查询频率和维护成本。对于高基数列,这些优化效果更为显著。原创 2025-07-22 08:30:00 · 588 阅读 · 0 评论 -
PostgreSQL 中跨类型 JOIN 查询的索引优化策略
PostgreSQL中跨类型JOIN查询的索引优化策略摘要:当需要对int4和text类型的列进行JOIN操作时,可采用三种优化方案:(1)创建转换索引(如b.colum::int4)并重写查询;(2)添加冗余列并建立标准索引;(3)使用表达式索引。最佳方案取决于数据特征,推荐统一列类型或使用转换索引。性能测试显示,有索引的JOIN比无索引快7倍以上。关键是通过EXPLAIN验证是否命中索引,并定期维护表达式索引的统计信息。原创 2025-07-21 17:00:00 · 730 阅读 · 0 评论 -
对于IS NULL 和 IS NOT NULL 的字段如何使用索引提速?
本文介绍了优化数据库中IS NOT NULL查询的索引策略。主要内容包括:1)基础优化方案如标准B-tree索引和函数索引;2)高级策略如筛选索引和覆盖索引;3)各数据库(PostgreSQL/MySQL/Oracle)的特定实现方法;4)性能对比测试显示筛选索引可将查询从顺序扫描优化为索引扫描;5)最佳实践建议包括NULL比例评估、复合索引策略和索引维护。合理应用这些技术可使IS NOT NULL查询性能提升10-100倍,具体效果取决于数据分布和数据库实现。原创 2025-07-20 17:30:00 · 796 阅读 · 0 评论 -
SQL中的EXPLAIN命令详解
EXPLAIN是SQL中用于分析查询执行计划的命令,它能帮助开发者理解数据库如何执行查询,是性能优化的关键工具。下面我将全面介绍EXPLAIN的使用方法和解读技巧。原创 2025-07-20 17:00:00 · 571 阅读 · 0 评论 -
数据库中索引到底对哪些sql操作具有提速作用?
数据库索引能显著提升特定SQL操作的性能,主要包括精确匹配查询(WHERE条件)、范围查询(BETWEEN/比较)、排序(ORDER BY)、分组(GROUP BY)和连接(JOIN)操作。对前缀匹配的LIKE查询('abc%')和唯一性检查也有加速效果。但索引对全表扫描、非前缀LIKE查询('%abc')、使用函数或计算的列查询、NOT IN和OR条件中的非索引列无效。特殊索引(如GIN/GIST)可加速JSON、数组等复杂查询。使用时需注意数据类型匹配、复合索引的最左前缀原则,并定期维护索引。最佳实践是原创 2025-07-15 19:23:59 · 502 阅读 · 0 评论 -
数据库中同一字段同时拥有唯一索引和GIN/GIST索引的影响
摘要:同一字段同时拥有唯一索引和GIN/GIST索引时,数据库会根据查询类型智能选择索引。唯一索引(B-tree)处理精确匹配和约束,GIN/GIST处理文本搜索。两者共存不会冲突,查询优化器自动选择最优索引。实际应用中,这种组合常见于需要唯一性约束和文本搜索的场景(如商品SKU唯一性+描述模糊查询)。需注意索引维护成本和存储开销,建议监控使用频率并根据数据特性优化索引。不同数据库对此支持程度不同,PostgreSQL完全支持这种组合,而MySQL等需替代方案。(150字)原创 2025-07-19 08:00:00 · 472 阅读 · 0 评论 -
PostgreSQL 中的 pg_trgm 扩展详解
PostgreSQL的pg_trgm扩展通过三元组(trigram)技术优化文本搜索,支持模糊匹配、相似度计算和正则表达式查询。核心功能包括将文本拆分为连续3字符组,创建GIN/GIST索引加速搜索。典型应用场景有优化LIKE查询、相似度排序和高级文本搜索。性能上,索引比B-tree大但查询快10-100倍,适合构建"Google-like"搜索,但对短文本和非ASCII字符效果有限。使用时建议结合普通索引,并注意语言处理需求。原创 2025-07-17 17:00:00 · 933 阅读 · 0 评论 -
SQL中对字符串字段模糊查询(LIKE)的索引命中情况
SQL中字符串索引能否用于LIKE查询取决于查询模式和数据库类型。前缀匹配('abc%')通常可以使用B-tree索引,而后缀或包含匹配则不能。不同数据库提供特殊解决方案:MySQL可反向索引处理后缀查询,PostgreSQL需pg_trgm扩展,SQL Server可用全文索引。通用优化建议包括优先使用前缀匹配、检查执行计划,以及对于复杂搜索考虑专用搜索引擎。实际索引使用情况应以EXPLAIN分析为准。原创 2025-07-16 17:00:00 · 651 阅读 · 0 评论 -
在线事务处理OLTP(Online Transaction Processing)负载是什么?
OLTP(在线事务处理)负载是处理高并发短事务的工作类型,特点包括原子性操作、毫秒级响应和小数据量读写,常见于金融、电商等实时业务场景。与OLAP不同,OLTP侧重高频率操作而非数据分析。优化需考虑数据库设计、索引、锁机制和缓存策略,同时面临锁竞争和扩展性挑战。OLTP负载直接影响用户体验,需平衡性能与数据一致性。原创 2025-07-13 10:10:15 · 482 阅读 · 0 评论 -
在SQL中对仅有2个值的int2列设置索引的性能分析
SQL低基数int2列索引效果分析摘要 对仅有0和1两个值的int2(smallint)列创建索引需谨慎评估,通常不建议单独建索引,因50%的选择性导致优化器可能忽略。但在数据极端倾斜(如99:1分布)、作为复合索引首列或使用部分索引/位图索引时可能有效。不同数据库处理方式各异:PostgreSQL自动使用位图扫描,SQL Server支持筛选索引,Oracle适合位图索引。最佳实践包括优先考虑复合索引、部分索引或删除无效索引,并通过EXPLAIN验证实际效果。多数情况下,单独对双值int2列建索引弊大于利原创 2025-07-10 10:01:51 · 603 阅读 · 0 评论 -
SQL 查询中 ORDER BY 的执行顺序
在 SQL 查询中,ORDER BY子句是在SELECT子句之后执行的。原创 2025-04-14 16:45:03 · 585 阅读 · 0 评论 -
不同数据类型在数据库和编程语言之间的对应关系表
不同数据类型在数据库和编程语言之间的对应关系表原创 2025-02-28 10:53:25 · 382 阅读 · 0 评论 -
sql 查询某个字段出现重复的数据
【代码】sql 查询某个字段出现重复的数据。原创 2025-02-28 08:31:36 · 217 阅读 · 0 评论 -
linux mysql 8 大小写敏感问题
由此,我们可以得出,一个好的数据库命名规范是:数据库名、数据表名、表字段名全用小写命名,单词之间用下划线(_)连接。mysql - 命名规范/命名规则/sql规范/sql规则。原创 2024-12-22 10:58:18 · 1083 阅读 · 0 评论 -
sql 查询两个字段同时出现重复的数据
sql 查询两个字段同时出现重复的数据。原创 2024-05-11 09:50:09 · 717 阅读 · 0 评论 -
SQL Server 定期自动重新组织索引
SQL Server 定期自动重新组织索引原创 2023-06-09 23:38:31 · 807 阅读 · 0 评论 -
SQL Server 定期自动收缩数据库
SQL Server 定期自动收缩数据库原创 2023-06-09 23:37:02 · 671 阅读 · 0 评论 -
[数据库安全]Mysql 只允许指定IP访问
mysql8.0以后的版本指定IP访问的方式发生了变化。网上大多教程都已经过时。原创 2023-05-18 09:53:30 · 2634 阅读 · 0 评论 -
[运维]如何快速压缩一个数据库的硬盘占用大小(简单粗暴但有效)
在维护网站时我们经常会遇到数据库占用服务器磁盘空间的问题。高端的食材往往只需要采用最朴素的烹饪方式。本文我讲一个简单粗暴但有效的方法。本文以SqlServer为例进行介绍,但所有关系型数据库均适用这个解决方案。数据库文件主要包含3部分内容:数据空间、日志、索引空间。也就是数据表本身的数据。这部分内容的压缩只能靠数据清理。如僵尸用户数据清理。数据清理确实是一个有效的方法。但这不是本文要讲的方法。日志作用是用来记录增删改等对数据库有更新的内容的记录(对数据库的改动),而查询的语句如show、select语句,不原创 2022-12-06 21:51:32 · 1922 阅读 · 0 评论
分享