IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:SQL

共 176 篇相关文章

IT 累计浏览 3,444

MySQL的临时表

这篇讲的是MySQL临时表,文章作者从实际开发中常见的“临时数据存储”需求出发,点出了MySQL临时表的两种主要形态:内存临时表(基于MEMORY引擎)和磁盘临时表(基于InnoDB或MyISAM引擎)。 文章的核心是对比这两种表在关键特性上的差异。比如,内存临时表速度极快但受内存大小限制,且默认使用哈希索引;而磁盘临时表容量更大,支持事务和更复杂的索引,但I/O开销相对较高。作者还解释了MySQL优化器何时会选择创建临时表,例如在处理复杂子查询、GROUP BY或ORDER BY操作时,并且详细说明了通过tmp_table_size和max_heap_table_size参数来控制内存表大小、决定何时溢写到磁盘的具体机制。 这篇文章的价值在于,它不仅告诉你临时表是什么,更深入剖析了其背后的存储与选择逻辑,帮助开发者在面对大量临时数据处理或复杂查询优化时,能更好地理解数据库的行为并做出合理的配置与设计决策。

IT 累计浏览 4,053

MySQL 连接

这篇讲的是 MySQL 中连接查询这个核心概念,它解释了如何让查询的数据从多个表中联合检索出来。作者指出,只需在 FROM 子句中列出所有相关表名,就能得到组合后的结果集,而连接条件和更细致的筛选可以分别在 FROM 或 WHERE 子句中指定。 文章重点梳理了数据库中几种主要的连接类型,包括自然连接、内连接、外连接和交叉连接。它没有停留在定义,而是点出了这些连接方式是理解多表查询的基础,为后续在实际场景中选择合适的连接策略提供了知识脉络。 对于想扎实掌握 SQL 多表操作的开发者来说,这篇文章厘清了连接查询的基本语法框架和不同连接类型的并列关系,是构建相关知识体系的一个清晰起点。

IT 累计浏览 3,595

MySQL”海量数据”查询性能分析

这篇讲的是作者对 MySQL 在“海量数据”查询场景下性能瓶颈的一次深入探查。作者没有停留在理论层面,而是基于一个真实的、数据量持续增长的业务库展开实测。 核心分析集中在当单表数据量从百万级攀升至千万甚至上亿时,那些原本“快如闪电”的查询如何悄然变慢。文章重点拆解了索引设计、查询计划(Explain)在数据膨胀后的失效情况,以及常见的“回表”和“临时表”操作如何成为性能黑洞。作者还对比了不同分页查询(如使用 LIMIT 的深分页)在不同数据量级下的巨大响应差异,并提供了优化后的查询写法示例。 最终,文章给出了清晰的结论:面对真正的海量数据,单纯依赖“加索引”往往不够。需要从数据模型设计、查询语句重构,甚至分库分表的预判上进行系统性的性能规划。对于正面临数据增长压力、查询开始变卡的开发者来说,文中提供的诊断思路和优化案例有很强的实操参考价值。

IT 累计浏览 3,309

HIVE的CTAS用法探究

这篇讲的是在实际数据处理中一个看似微小却影响下游的问题。作者在使用ADM系统时,发现其自动将Hive QL封装为CTAS(Create Table As Select)语句后,导出的数据中NULL值全部显示成了“\\N”这个字符串。这给需要接收这些数据文件的下游客户带来了困扰,因为对方的数据处理系统并不认得这个特殊字符。 问题的根因在于Hive的默认存储机制:它内部使用字符串“\\N”来表示空值(NULL)。当数据通过CTAS创建并后续导出时,这个表示方式被原样保留了下来,导致了语义上的混淆。文章深入剖析了这一机制,并针对如何正确处理CTAS操作中的NULL值给出了具体的解决方法和配置调整建议。通过这个案例,我们可以看到,在构建数据管道时,对上游系统默认行为的理解至关重要,一个小小的参数差异就可能影响整个数据流转的可用性。

IT 累计浏览 2,936

DBA诊断利器 - Event 10046和 10053

这篇讲的是 Oracle DBA 最常备的两个诊断事件:10046 与 10053。作者 eygle 从实际经验出发,指出在面对慢 SQL 或性能调优时,这两个事件就像 DBA 工具箱里的“透视镜”和“内窥镜”,各有其不可替代的作用。 简单来说,10046 事件主要用来捕获 SQL 的详细执行过程信息,比如执行计划、绑定变量值、等待事件等。它回答的是“这条 SQL 实际是怎么跑的”,常用于定位已知的性能问题。而 10053 事件则更为深入,它记录了 Oracle 优化器(CBO)的内部决策过程,解释了为什么优化器选择了某个执行计划而不是其他。它回答的是“优化器为什么这么想”,对于理解复杂的执行计划选择、进行深度调优至关重要。 文章的核心价值在于清晰地对比了这两者的适用场景。当你需要诊断一条 SQL 的运行时行为时,用 10046;而当你需要弄明白优化器为何做出一个“令人费解”的计划时,就必须请出 10053。作者强调,理解它们的差异并按需使用,能极大地提升诊断效率。 掌握了这两个事件的使用,DBA 在分析性能瓶颈时就能从“现象观察”深入到“决策还原”,使调优工作更有针对性。

IT 累计浏览 4,174

MySQL 应用小笔记

这篇笔记聚焦于 MySQL 在实际应用中可能出现的挂起现象。作者从一次具体的线上问题切入,探讨了当查询缓慢甚至无响应时,如何进行系统性的排查。文章梳理了几个常见的“病灶”:比如未提交的事务长期持有行锁导致后续操作排队,或是慢查询累积占满连接池。针对每种情况,作者都给出了对应的诊断命令和排查路径,例如通过 `SHOW PROCESSLIST` 观察线程状态,以及利用 `information_schema` 来分析锁冲突。 核心的调试思路在于,从现象反推到资源竞争与状态异常。文章不仅说明了问题是什么,更强调了如何一步步定位到根因——是代码逻辑缺陷、索引缺失,还是服务器配置不当。对于开发者而言,这套从“卡住”到“疏通”的分析方法,比单纯记住某个命令更有价值。

IT 累计浏览 1,860

DBA手记:Failed Login Count带来的性能问题

这篇讲的是《Oracle DBA手记II》中一个真实踩坑案例:一个看似无害的数据库参数 `Failed Login Count`,在高并发登录场景下,竟然导致了性能显著下降。 作者从一个生产环境性能突降的排查出发,锁定了异常的数据库等待事件。追踪发现,罪魁祸首是用于记录登录失败次数的统计功能。每当有用户(尤其是程序客户端)因密码错误等原因登录失败时,Oracle 会频繁更新这个统计信息,产生了大量行级锁竞争。在批量、并发的连接尝试下,这成了严重的性能瓶颈。 文章详细剖析了该问题的触发条件与根因,并给出了具体的解决方案——通过调整 `SEC_CASE_SENSITIVE_LOGON` 等参数或在特定时段调整统计策略,从而规避锁争用。这个案例生动地提醒 DBA 们,一些默认开启的、用于审计与监控的功能,在特定业务模式下可能悄然变为性能负担,需要结合实际负载仔细权衡其开关与粒度。

IT 累计浏览 2,669

网站日志分析方法系列一:聚焦式分析

这篇讲的是如何用“聚焦式分析”来回答运营中最实际的页面价值问题。文章从设计师和运营同事的常见困惑出发:一个页面改版后,它到底带来了多少用户后续访问?是否促成了交易?用户最终去了哪里? 作者提出的解法是,围绕特定页面进行日志的“聚焦”挖掘。具体来说,就是先确定一个分析锚点(比如首页某个新入口),然后从海量日志中筛选出所有访问了该页面的用户会话。接着,追踪这些用户接下来的点击流路径,量化他们访问的商品页数量、停留时长,并最终检查是否形成了订单转化。这种方法避免了泛泛的全站分析,像用显微镜一样,能清晰还原出特定页面在整个用户旅程中的真实作用。 通过这种方式,团队可以拿到确凿的数据,判断一个页面是高效的“枢纽”还是无效的“死胡同”,从而让后续的改版和资源投放有据可依。

IT 累计浏览 4,438

数据库开发规范

这位作者从实际的开发痛点出发,整理了一份数据库开发规范。它不是空泛的理论,而是直接聚焦于团队协作和代码质量,提炼了从建表命名、字段类型选择到索引设计、慢查询处理等一系列关键环节的最佳实践。 具体来看,规范会强调诸如使用有意义的命名、避免使用 `NULL` 值字段、谨慎创建复合索引等实操细节。对于查询优化,文章可能给出了分析慢查询日志、使用 `EXPLAIN` 命令等具体方法。这些规则旨在减少歧义、预防潜在的性能陷阱,并提升数据库的长期可维护性。 作者在参考各方资料的基础上,将这些分散的点系统化,形成了一套适用于大多数项目的开发公约。对于需要建立或优化数据库开发流程的团队而言,这份提炼好的清单能直接作为团队内部编码规范的起点。

IT 累计浏览 6,848

SQL到NOSQL的思维转变

这篇讲的是数据库选型中一个常被忽略的思维差异:为什么NOSQL常标榜性能超越传统关系型数据库?文章指出,关系型数据库经过数十年的优化与积累,其技术深度不容小觑,许多NOSQL系统的设计也吸纳了这些成熟技术。然而,作者从系统设计层面提出了一个关键问题:究竟是什么架构上的因素,在理论上限制了关系型数据库的性能天花板?文章并非简单罗列功能对比,而是引导读者从底层设计哲学出发,思考SQL与NOSQL在数据模型、扩展性与一致性上的根本权衡,从而理解不同架构各自适配的场景与局限。

IT 累计浏览 3,085

Oracle中审计删除(DELETE)操作的触发器

这篇讲的是如何用Oracle触发器实现对DELETE操作的轻量级审计。作者从实际的运维需求出发,帮朋友编写了一个简单但实用的解决方案。 核心实现思路很清晰:先创建一张审计表来存储删除记录的元数据,再编写一个行级触发器在DELETE操作发生时自动插入审计数据。触发器被设计为在每次删除操作触发一次(FOR EACH ROW),从而能逐条记录。记录的内容不仅包括了被删除数据的关键业务字段,还贴心地捕获了执行删除操作的数据库用户(USER)和精确到秒的系统时间(SYSDATE),为事后追溯提供了完整的信息链。 这个方案的巧妙之处在于其“四两拨千斤”的直接性——没有复杂的配置或依赖,仅用数据库原生的对象组合就实现了核心审计功能。它特别适合那些需要快速部署、对审计粒度要求明确(仅追踪删除操作),且追求维护简便性的场景。对于许多中小型项目或特定模块的数据保护来说,这种实现方式往往比启用全面审计或部署第三方工具来得更加轻便、高效。

IT 累计浏览 2,449

EXPDP 过程中的 SYS_XMLGEN 性能影响

这篇讲的是在使用Oracle数据泵(EXPDP)进行数据导出时,一个容易被忽视的性能瓶颈:后台调用的SYS_XMLGEN函数。作者从实际的客户性能诊断案例出发,指出了当EXPDP进程执行到需要生成XML的环节时,可能会调用SYS_XMLGEN,而这个操作本身可能带来显著的性能开销。 文章建议,当怀疑EXPDP作业存在性能问题时,应重点检查对应时间段的AWR报告,寻找由SYS_XMLGEN引发的可疑SQL。文中提到了一种带有RULE提示符的典型SQL,并解释说,由于RULE提示会影响优化器的行为,因此在不同的优化器模式(如CBO或RBO)下,这条SQL可能生成不同的执行计划,导致性能表现差异巨大。 作者指出,一个有效的诊断步骤是,将这类SQL提取出来在SQL*Plus中手工执行,以直观评估其性能。如果执行结果确实不佳,就需要进一步深入研究其根本原因,比如是否涉及对象统计信息过时、索引缺失,或是XML模式本身的复杂性,从而采取针对性的优化措施。

IT 累计浏览 2,397

cursor_sharing参数对于expdp的性能影响

这篇讲的是一个关于Oracle数据库性能的实际问题。作者从客户的生产环境出发,发现当数据库设置了`cursor_sharing=similar`参数后,执行数据泵(expdp)导出操作的速度出现了显著下降。文章通过测试验证了这一关联,并剖析了其中的技术原因:在该参数模式下,Oracle会过度合并相似SQL,导致为expdp生成大量非最优的执行计划,从而严重拖累了整个导出作业的效率。 核心发现是,这个旨在优化共享游标的参数,反而在特定的大批量数据导出场景下成为了性能瓶颈。文章给出的解决方案直接而有效——在需要进行expdp操作时,临时将参数调整为`cursor_sharing=exact`,以此绕过不必要的SQL合并,让数据泵工作在最佳状态。这个案例为DBA们提供了一个明确的踩坑记录和应对策略,在规划数据库参数与ETL任务时,需要特别留意这类潜在的相互影响。

IT 累计浏览 2,059

天道酬勤 - 从头细数来时路(Eygle的职业生涯)

这篇是Eygle对自己Oracle DBA职业生涯的一次深度回顾。文章从大学时代初次接触Oracle讲起,细致梳理了他如何从一个爱好者,一步步成长为国内知名的数据库专家。 作者回顾了几个关键节点:早期在ITPUB社区的活跃与学习积累,对Oracle底层原理的执着钻研,以及将实践经验系统化输出的过程。文中没有回避遇到的技术瓶颈与职业困惑,而是坦诚地分享了自己如何通过持续学习和实战,将“天道酬勤”这一信念落到实处。 Eygle特别提到了他与技术社区的深厚渊源,从早期的分享者到后来的推动者,他的成长轨迹也折射出中国第一代Oracle技术社区的发展风貌。文章结尾,他将这段旅程归结为对技术热爱与坚持的回报,传递出一种踏实、专注的技术人精神。

IT 累计浏览 2,985

让MySQL搜索、排序时区分大小写

这篇讲的是如何解决 MySQL 数据库在默认配置下搜索和排序时“吃掉”大小写差异的问题。作者从实际应用出发——比如需要严格匹配密码或区分大小写的唯一标识符时,发现 MySQL 默认的 `utf8_general_ci` 校对规则会自动忽略大小写,导致 `SELECT` 结果与预期不符。 核心方法是在 SQL 语句中通过 `COLLATE` 子句临时覆盖列的默认排序规则,例如使用 `WHERE utf8_column COLLATE utf8_bin = 'CaseSensitiveValue'`,或者在建表/修改列时直接指定二进制校对规则(如 `utf8mb4_bin`)。文章对比了在语句中强制、建表时设定以及利用 `BINARY` 关键字这几种方案的适用场景和注意事项。 关键差异在于性能与精确度的权衡:二进制排序更精确但可能影响索引效率和排序逻辑。作者清晰地指出了,对于必须精确区分大小写的业务字段(如密码哈希),选择 `utf8mb4_bin` 是更彻底的方案;而对于临时查询需求,则推荐在 SQL 中灵活添加 `COLLATE`,以最小改动达到目的。

IT 累计浏览 1,993

DBA初体验之亡羊补牢

这篇讲的是一位新手DBA的初次工作经历与深刻反思。作者原本怀揣着对MySQL DBA工作的热情,梦想能像行业前辈Peter一样取得成功,但第一份工作却随着秋风秋雨的季节提前结束,让他从信心满满陷入自我怀疑。他坦诚自己性格中的浮躁和不细心是导致工作失败的关键问题——这些特质在需要高度耐心和精确性的DBA岗位上尤为致命。 尽管已经意识到缺陷,作者在实际工作中仍未能有效控制它们,这让他对未来充满担忧。他花了两周时间休息和调整,仔细思考自己是否适合这个行业,并分享了工作中的具体小故事,比如在秋雨中奔波的细节,映射出DBA工作背后的现实挑战。通过这次复盘,作者发现DBA不仅依赖技术知识,更要求稳定的心态和细致的习惯;忽视性格因素,容易在职业生涯初期就遭遇挫折。 对于技术读者来说,这个故事提醒我们:在追求专业成长时,自我认知和主动调整同样重要。避免重复“亡羊补牢”的错误,才能在技术道路上走得更稳。

IT 累计浏览 4,192

学习与成长的困惑

这篇文章探讨了职场人常见的一个状态:学习与成长的困惑。作者通过与一位工作一年的DBA同事的聊天切入,这位同事正处在对职业发展感到迷茫的阶段。作者分享了自己对于这个问题的感受,指出这种因学习和成长而产生的困惑,是许多从业者在特定时期都会经历的正常现象。 文章没有给出宏大的解决方案,而是聚焦于一次具体的交流和由此展开的思考。它试图告诉读者,面对这类困惑,认识到它的普遍性本身就是一种缓解。关键可能在于理解,成长并非直线,瓶颈期的思考与迷茫,恰恰是系统梳理过往、明确下一步方向的契机。 如果你也曾在某个时刻对自己的技术积累或职业路径感到不确定,这篇文章提供的视角或许能让你看到,这并非个人独有的困境,而是一段需要被正视和消化的成长阶段。

IT 累计浏览 1,689

MySQL Show命令的使用

这篇讲的是MySQL里一个看似简单却贯穿日常开发的工具:SHOW命令。它从最常用的 `show tables` 出发,迅速拉开了MySQL信息探索的序幕。文章的核心在于系统梳理了SHOW命令家族的一系列实用指令,比如如何快速查看所有数据库、获取特定表的创建语句,或是诊断服务器状态和进程。这些命令就像数据库管理员的瑞士军刀,能在开发调试时帮你快速摸清当前环境——表是否存在、索引结构如何、连接情况怎样,一目了然。掌握它们,你就能在面对陌生数据库或复杂运维场景时,迅速获取关键信息,而不必依赖权限更高的管理界面或记忆繁琐的系统表查询。这份指南让数据库的内部状态变得触手可及。

IT 累计浏览 8,574

其实,文件也可以truncate

这篇从大家熟悉的数据库 truncate 指令切入,但立刻将目光转向了更早出现的 UNIX 系统命令。它清晰地对比了两者的异同:虽然都叫 truncate,但数据库版本保留表结构清空数据,而系统版本的操作对象是文件,不仅能清空至 0 字节,还能通过 -s 选项精确调整文件大小。 文章特别点出了文件 truncate 的一个实用场景:清理冗长的日志文件时,如果只想保留最头部的一部分关键信息,而非全部删除,普通的重定向清空(> log)就无能为力了。这时,truncate -s 4k log 这样的命令就能一步到位,既完成了清理,又保留了需要的上下文。 作者没有停留在命令本身,而是将它与日常运维中“清理日志但保留头尾”的痛点联系起来,让一个可能被忽略的系统工具,瞬间变得具体而有价值。这种从原理到实践的串联,使得知识点的讲解不浮于表面。

IT 累计浏览 4,622

冗余索引对查询效率的影响

这篇讲的是数据库里一个常见但容易被忽略的陷阱:冗余索引。它并不是一个全新的技术概念,而是对“索引并非越多越好”这一原则的具体剖析。作者从一个线上查询变慢的真实场景切入,最终定位到的根因并非缺索引,恰恰是存在了几组多余的冗余索引。 文章详细拆解了冗余索引是如何产生的——比如手动创建了一个与联合索引前缀重复的单列索引,或是因为历史迭代遗留下来的索引。关键点在于,这些索引不仅白白占用存储空间,更严重的是会拖慢所有涉及该表的写入(INSERT/UPDATE/DELETE)操作,因为每次数据变更都需要同步更新多个索引。 为了证明其影响,文中提供了一组对比数据:在清理掉特定冗余索引后,相关写入操作的性能提升了约40%,同时查询效率并未受到任何负面影响。这对于DBA和后端开发者来说是一个明确的信号:定期审查索引策略,用 `sys.schema_unused_indexes` 这类工具找出未使用的索引,并果断清理,是成本很低却效果显著的优化手段。