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

标签:SQL

共 176 篇相关文章

IT 累计浏览 59

如何在Hive SQL中构造临时表用于和其它的表做关联?

在Hive SQL处理数据关联时,针对少量uid-email映射数据,构造临时表是高效方案。本文介绍了两种主要方法:stack和union all。stack作为UDTF函数,能整齐生成二维映射,但必须通过lateral view展开以避免直接使用select列表导致的报错;而union all通过多次select拼接,兼容性强且易于手工增删。文章提供了完整代码示例,包括常见错误如stack报错及修正,并展示了如何与其它表进行join操作。此外,扩展讨论了不同规模ID关联的最佳实践:少量ID用IN子句,中等规模用stack或union all临时表,大规模或频繁复用则推荐上传文件或维护维表。这些方法优化了查询可读性和性能,适合数据工程师在临时分析或生产环境中参考。

IT 累计浏览 60

SmartPerfetto 开源:面向 Android Trace 分析的 Perfetto AI Assistant

SmartPerfetto 是一个面向 Android 性能工程师的开源 AI 助手,深度集成于 Perfetto UI,旨在将重复性的 trace 数据查询与初步判断流程自动化,使工程师能更专注于核心归因与决策。该项目将 Perfetto UI 作为前端,在其基础上增加了 AI Assistant 面板;后端由 TypeScript 编写的 agentv3 运行时负责场景识别、计划编排、工具调用与报告生成;核心数据查询仍然依赖 Perfetto 官方的 trace_processor_shell 执行 SQL。 其核心设计是将领域分析经验封装为可执行的 YAML Skill(目前包含 165 个,覆盖滑动、启动、ANR、渲染管线等场景),并通过 MCP 工具协议向 Agent 暴露结构化操作,确保大模型不直接接触原始 trace 文件,而是通过调用 SQL、Skill 和内部工具来获取数据与结论。这种架构使得分析过程可重复、结果可展示、规则可审查与复用。 该项目选择在开发阶段开源,以期利用真实设备、厂商差异和业务 trace 样本来持续打磨其分析规则与策略。它并非替代工程师,而是作为一个能稳定执行查询、整理证据并按策略检查的分析辅助工具,帮助性能工程师从海量 trace 事件中快速定位问题侧,减少手动翻表与编写临时 SQL 的工作量。

IT 累计浏览 2,611

Oracle 各种删除操作对空间返还的说明

DBA们常常遇到这样的困惑:对Oracle表执行DELETE、DROP还是TRUNCATE?这些操作对空间到底有何影响?这篇技术说明正是为厘清这些差异而写。 文章将三种常见删除操作(DELETE SQL、DROP TABLE、TRUNCATE TABLE)放在一起对比,从多个维度拆解其不同。关键差异点包括:DELETE操作不会将空间归还给表空间或文件系统,空间仅能被原表重用,但可能产生“高水位”;而DROP和TRUNCATE默认都会释放表空间,但依然不会自动收缩数据文件。此外,在本地管理表空间下,这些操作基本不会造成表空间碎片,但在老旧的字典管理表空间中,DROP和TRUNCATE则可能导致碎片。 对于追求“干净”释放空间的场景,文章也给出了务实建议:例如使用`shrink space`整理表,或对索引执行`coalesce`。最终目的是帮助DBA们根据实际需求(是彻底删除、快速清空还是谨慎释放)选择合适的操作,并管理好预期——Oracle默认不会自动将空间返还给操作系统。

IT 累计浏览 1,909

删库跑路救命策略

这篇文章从作者亲身经历的“血泪教训”出发:休假期间因备份脚本的字符集设置错误,导致数据回滚失败,最终背锅降绩效。基于这次事故,作者系统梳理了MySQL误删数据的常见“坑”、预防措施以及紧急恢复方案。 预防篇提出了五条实用建议,比如将 `rm` 改为 `mv`、删除对象先 `rename` 归档、操作前善用事务与小批量验证等,核心在于培养操作习惯并保持敬畏之心。恢复篇则针对误删库表、物理文件被删、未提交事务的 `delete` 等不同场景,给出了从“立刻 kill 进程”到利用 `innodb_force_recovery` 启动恢复模式等具体的急救步骤。 文章结尾强调,无论平台如何发展,物理与逻辑备份都是不可替代的底线。这篇分享将事故复盘与实战经验结合,对所有涉及数据库操作的人员都是一次生动的安全警示。

IT 累计浏览 1,397

如何在命令行中整理数据

数据审计中常遇到格式错误、乱码、控制字符等棘手问题,而许多人却执着于寻找昂贵的专用工具或编写复杂脚本。这篇文章作者结合自身兼职数据审计的经验,提出了一个返璞归真的解决方案:直接使用命令行工具链。 作者处理过十万至百万行、包含多达两百个字段的导出表格,发现混乱无处不在。他指出,人们往往陷入“数据悲伤”的五个阶段,最终才承认需要帮助,并误以为必须依赖特定软件。实际上,Bash shell本身就是一个强大的工具箱。grep、cut、awk这些经典的文本处理器,在应对脏数据时既可靠又高效。 文章用一个具体例子展示了威力:如何用一行组合命令(tail、cut、awk),在短短4秒内从超过112万条记录中精准找出某个字段的最长数据项,并封装成可重复使用的函数。作者强调,这种方法的安全优势尤为突出——所有操作都在数据库外部进行,使用的是导出后的纯文本副本,因此完全不影响原始数据库的结构与安全。 对于受过Unix训练的读者,这或许是一次怀旧;但对于更多人,它是一个实用提醒:在追求复杂方案前,不妨先“保持冷静,打开一个终端”。

IT 累计浏览 6,812

SQL里是否可以使用JOIN

这篇讲的是一个流传甚广的技术误区:很多公司出于“性能慢”的理由禁止程序员在SQL中使用JOIN。作者从这个常见的约定出发,通过一个查询最新帖子和用户信息的实例进行了直接对比。文章指出,用JOIN完成的操作,如果拆解成两次独立查询和代码层合并,其开销很可能更大,“用JOIN慢”其实是个没有严格论证的人云亦云的结论。 作者进一步点明了真正值得考虑的问题所在——它并非性能,而是系统架构的灵活性。当使用JOIN时,你隐含地假设了相关的表将永远部署在同一个数据库实例上。一旦项目发展,表可能因拆分而“离婚”到不同实例,届时所有用到JOIN的地方都可能需要重构。因此,文章给出的核心建议是:如果相关表未来有独立部署的可能,就要谨慎使用JOIN;否则,完全可以用。 所以,用JOIN慢往往不是问题的本质。下次如果听到别人以性能为由反对JOIN,或许可以指出,真正需要权衡的是对未来数据库架构变更的预判。

IT 累计浏览 2,325

《Effective java》—–读书笔记

读完《Effective Java》后,作者结合自己的面试反思与年度学习计划,写下这篇笔记,摘录并梳理了书中多条核心原则。笔记从创建对象讲起,强调了静态工厂方法的优势、避免创建不必要对象以及如何通过私有构造器或枚举强化单例。接着,重点讨论了类与接口设计:最小化可访问性、为不可变性努力、优先使用组合而非继承、以及如何用接口定义类型和用骨架实现类弥补抽象类的不足。 在方法层面,笔记总结了慎用重载和可变参数、返回零长度数组而非null等实用建议。通用编程部分则归纳了最小化局部变量作用域、优先使用for-each循环和基本类型等性能与可读性并重的技巧。最后,笔记也提到了异常处理的原则——异常应只用于异常情况。 这些笔记摘录不仅保留了原著的精华论点,还结合了博主自己的理解,如通过WeakHashMap管理缓存、继承判断的“is-a”原则等,将“四大圣经”之一的实践智慧转化为开发者可直接参考的要点清单。

IT 累计浏览 2,027

MySQL事务隔离级别的暗门

你是否知道,在 MySQL 中不加 GLOBAL 或 SESSION 关键字直接设置事务隔离级别,其效果与你想象的可能完全不同?这篇文章就深入剖析了这个容易被忽略的“暗门”。 它对比了三种调整事务隔离级别的场景:使用 GLOBAL 关键字修改全局设置(仅对新连接生效),使用 SESSION 关键字修改当前会话,以及最特别的——两者都不加。作者从官方文档出发,明确指出了核心差异:不加关键字的 SET 语句,其修改仅对当前会话的下一个尚未开始的新事务生效,并且在该事务结束后,隔离级别会自动恢复为当前会话之前的设置。 为了证实这一点,文章通过一个详尽的实验演示进行了验证。实验展示了,在会话内先执行 SET TRANSACTION(不加关键字),随后查询变量显示隔离级别未变,但当新事务启动后,其行为(如行锁阻塞)却符合设置的新隔离级别(如 SERIALIZABLE)。而当该事务结束后,下一个新事务又回到了原先的隔离级别。 基于这个特性,文章给出了实用的建议:如果需要持久化地改变全局隔离级别,应在配置文件中设置;如果只是想在当前会话中临时为一个或几个事务调整级别,那么不加 SESSION 关键字的 SET 方式反而更方便,因为它会自动“复位”,省去了手动改回的步骤。这个细节对于理解 MySQL 事务行为和编写特定逻辑的代码非常有帮助。

IT 累计浏览 4,454

MySQL DBA修炼秘籍

这篇指南从职业发展路径出发,为立志成为MySQL DBA的同行勾勒了一幅清晰的修炼地图。作者结合自身及业内经验指出,现代互联网公司的MySQL DBA远不止是数据库管家,还需深入主机、网络、安全甚至自动化开发,逐步向运维DBA、开发DBA、架构师等专精方向演进。 文章核心在于“如何修炼”。从数据库基础概念与Linux入门讲起,到推荐《MySQL必知必会》、官方手册等学习材料,并强调通过搭建博客等实践来巩固知识。对于在职DBA,则给出了深入学习并发事务、锁机制、存储引擎等关键点的方向。 更吸引人的是,文中描绘了DBA理想的日常工作图景:约10%的时间通过平台处理基础运维,大部分精力投入SQL审核、主动性能优化、监控以及与业务的深度沟通,实现从“救火”到“防火”的转变。文末还附上了官方手册、知名技术博客等一系列实用资源。如果你正徘徊在DBA门口,或想系统规划进阶,这篇过来人的经验总结值得细品。

IT 累计浏览 2,054

更好的 SQL 模式的 10 条规则

这篇讲的是数据库模式设计中常被忽视、却会影响长期维护效率的细节。作者从大量实际数据库的读写经验出发,总结了十条黄金法则,帮助开发者从源头避免未来的“痛苦”。 它核心强调命名与结构的清晰性。例如,对象名只用小写字母、数字和下划线,避免使用点、空格和大写,这能消除查询时的引号依赖和大小写混淆。列名和表名应具备自说明性,避免使用晦涩缩写或保留字。外键命名需保持全局一致。 此外,文章给出了具体的数据类型建议:主键推荐使用自增整数而非UUID,以简化查询和数据清理;时间数据应存储为统一的DATETIME类型,并始终使用UTC时区,而非字符串或Unix时间戳。它还指出应追求单一数据源,谨慎使用JSON列进行分析,并避免过度规范化(例如无需为邮编等简单值单独建表)。 遵循这些规则,能让你的数据库结构在未来需求变化和团队扩张时,依然保持清晰、高效且易于维护。

IT 累计浏览 2,922

mysql索引合并:一条sql可以使用多个索引

很多开发者可能还固守着“一条SQL只能使用一个索引”的旧观念,其实MySQL的索引合并特性早已支持更灵活的索引使用。这篇技术文章就详细拆解了这个特性。 文章首先厘清了概念:索引合并并非新事物,它能让MySQL对**同一个表**的多个索引进行范围扫描,并将结果通过并集、交集等方式合并,最终返回数据。要判断查询是否利用了索引合并,只需在`EXPLAIN`结果中看`type`列是否为`index_merge`,以及`key`列是否列出了所有被使用的索引。 作者通过一组精心设计的数据和查询进行演示。例如,当执行`WHERE (key1_part1=4 AND key1_part2=4) OR key2_part1=4`时,`EXPLAIN`显示成功使用了索引合并(`Using sort_union(key1,key2)`)。但另一个结构相似的查询却导致全表扫描。文章指出,这揭示了一个核心事实:**优化器是否选择索引合并,根本上取决于对数据统计的分析和成本估算**,单纯讨论SQL写法是否“能用”索引并不全面。 此外,文章还提到了一个关键的版本差异细节:在MySQL 5.6.7之前的版本中,存在“range优先”原则,可能会抑制索引合并的使用,即使后者理论上更优。这提醒我们,在考虑索引策略时,数据库版本也是不可忽视的因素。

IT 累计浏览 3,259

那些常见的Oracle错误

这篇讲的是Oracle数据库运维中那些高频出现的“拦路虎”。作者从DBA经常面临的实际故障现场出发,梳理了ORA-00600、内存耗尽、空间不足等几类典型问题。文章不止于罗列现象,而是深入到了问题的“肌理”——比如ORA-00600这类内部错误,其第一个参数和数据库版本就是定位根因的钥匙;ORA-04030则往往与PGA内存分配和操作系统限制有关。 更实用的部分在于诊断思路。文章引导读者从检查alert.log和trace文件入手,还指出了Oracle官方在Metalink上提供的600/7445诊断工具这个利器。针对具体案例,如ORA-00600[729]“UGA空间泄露”,给出了设置事件参数“10262”来屏蔽小泄露的明确解决方案。这种“故障现象-诊断方法-官方工具-具体参数”的完整链条,为运维人员构建了一套可复用的排查预案,能有效降低面对突发故障时的手足无措感。

IT 累计浏览 2,656

Oracle字符类型存数字及查询数字时使用单引号走不走索引的问题

这篇文章解决的是一个在实际数据库开发中容易产生争议的问题:用varchar2类型存放的数字字段,在查询条件中给数字加上单引号,到底会不会导致索引失效?作者从团队内部的实际分歧出发,通过在Oracle 11.2.0.4.0版本上进行测试来验证结论。 文章首先通过建表和数据准备,复现了讨论的场景。核心对比点在于两种常见的错误认知:一种是认为“char类型存数字,查询不加单引号不走索引”;另一种则想验证“varchar2类型存数字,查询加单引号是否还会走索引”。作者通过具体的执行计划截图(文中虽未显示但提到测试信息),清晰地展示了不同写法下的索引使用情况。 最终得出了明确的结论:对于varchar2类型字段,无论在查询时是否为数字加上单引号,都能正常走索引。这个结果厘清了一个常见的误解,并为后续将varchar2字段改为number类型的设计决策提供了数据支持。对于DBA和开发人员而言,理解数据库在处理隐式类型转换时的具体行为,有助于编写出既准确又高效的SQL语句。

IT 累计浏览 2,480

如何成为MySQL DBA

这篇文章就像一份路线图,为想进入MySQL DBA领域的朋友清晰地规划了从入门到进阶的学习路径。作者凭借十多年的一线经验,指出不必过分畏惧这个岗位的门槛,并强调了扎实的Linux基础是关键的第一步。 核心内容聚焦于一条明确的DBA学习主线:从理解MySQL版本与启动原理、掌握基础SQL语言,到深入学习复制、备份恢复、压力测试,直至最终能剖析InnoDB的事务与锁机制。作者不仅列出了具体要掌握的技术点,还分享了一些实用建议,比如学习SQL规范时可以请教有经验的前辈。 文章进一步指出了向高级DBA迈进时需要拓展的知识面,包括操作系统层面的IO与内存理解、高可用架构的自主设计以及平台管理能力。最后,作者回归到技术人持续学习的本质,为这条成长之路定下了脚踏实地的基调。

IT 累计浏览 2,199

EXPLAIN执行计划中要重点关注哪些要素

这篇讲的是如何快速解读 MySQL EXPLAIN 执行计划,抓住性能优化的关键。对于 DBA 和后端开发者来说,EXPLAIN 是诊断 SQL 性能的必备技能,但面对输出结果中的众多字段,很容易抓不住重点。 文章从实战出发,提炼出了最需要关注的几列信息:type、key、key_len、rows 和 Extra。作者特别详细地梳理了 `type` 字段的取值,将其从最差的 `ALL`(全表扫描)到最好的 `system`(系统表)进行了清晰排序,比如解释了 `index` 类型可以避免回表,`const` 则意味着基于主键的唯一查询。 除了查询类型,文章也点明了其他几个要素的优化含义:`key` 列告诉你是否命中了索引;`rows` 值越小代表预计扫描行数越少,查询越高效;而 `Extra` 中的 `Using filesort` 和 `Using temporary` 则是需要警惕的性能隐患信号。 掌握这几个核心要素,你就能在面对慢查询时,快速从 EXPLAIN 结果中定位到瓶颈所在,为索引优化和查询改写提供明确方向。

IT 累计浏览 2,873

Oracle正则表达式使用小结

这篇文章梳理了Oracle数据库从10g开始支持的正则表达式功能。作者将匹配逻辑集中在数据库端,可以避免在中间层处理,从而简化开发。文章概要总结了Oracle中使用正则表达式的核心方法。 内容重点介绍了五个关键的正则表达式函数:REGEXP_LIKE 用于条件过滤,REGEXP_COUNT 能统计模式出现次数,REGEXP_INSTR 可定位首次匹配位置,REGEXP_REPLACE 支持模式替换,REGEXP_SUBSTR 则能提取满足模式的字符串。每个函数都配有清晰的SQL示例。 除了函数用法,文章还梳理了控制匹配行为的选项,比如忽略大小写的“i”、多行模式“m”等,并通过示例解释了不同选项带来的具体差异。此外,文中也列举了如“.”“+”“*”等常见元字符及其含义,为实际编写匹配模式提供了参考。

IT 累计浏览 2,242

解读EXPLAIN执行计划中的key_len

这篇文章讲的是MySQL中EXPLAIN执行计划的key_len列该如何解读,它如何帮助你判断联合索引的实际使用情况。 作者指出,key_len代表查询中使用的索引字节数,其计算涉及几个关键因素:索引列的基础类型字节数(如INT为4字节,BIGINT为8字节)、字符串列的字符集(例如UTF8下每个字符占3字节)、该列是否允许NULL值(需额外增加1字节),以及是否为变长类型(如VARCHAR需额外增加2字节)。 文章通过一个清晰的表格列举了不同列定义下的具体计算示例,例如`int not null`的key_len为4,而允许NULL的`varchar(30) utf8`则为`30*3 + 2 + 1 = 93`。这能让你直观看到各种约束对索引长度的影响。 最后作者强调了一个重要细节:key_len仅统计了WHERE条件过滤所使用的索引列,并不包含ORDER BY或GROUP BY部分用到的索引。因此,在分析如`WHERE c1=? AND c2=? ORDER BY c1`的查询计划时,即便有联合索引,其key_len值也可能小于索引总长度,这对于理解查询优化器行为很有帮助。

IT 累计浏览 3,372

SQL 新手指南

这篇指南从“SQL无处不在”的现实切入,为零基础读者拆解了数据库与SQL的核心概念。作者将抽象的数据库比作更强大的Excel电子表格,清晰解释了表、行列、关系等基础元素,并用一个“电影台词”数据库作为贯穿示例,直观展示结构化数据如何被组织和关联。 文章的核心在于讲解SQL的四种基本操作(CRUD):创建、读取、更新和删除数据,这是与数据库沟通的基石。作者强调,尽管有各种可视化工具,但理解SQL语言本身至关重要——它语法接近英语,是一种声明式语言,掌握它能让你更高效、更灵活地解决问题。 整体而言,这是一份非常扎实的入门引导,不仅告诉你SQL是什么,更通过具体的表格实例,让你感受到关系型数据库如何将杂乱数据变为可高效查询的资产,为后续学习打下坚实基础。

IT 累计浏览 3,094

ORACLE怎样将CHAR类型字段转换成CLOB

这篇讲的是Oracle数据库中一个常见但细节不少的字段类型转换问题。文章直接切入实操,演示了如何将CHAR类型的字段转换为CLOB类型。它分了两种场景来具体说明:一种是目标列当前为空,另一种是列中已经存放了数据。 针对这两种情况,文章分别给出了转换的SQL思路和操作步骤。对于空列,操作可能相对直接,而列中已有数据时,则需要考虑数据的迁移与处理。通过具体的表结构示例(比如sdb_b2c_goods表)和代码演示,让读者能清晰地看到每一步操作。 对于需要调整表结构、迁移大文本数据的开发者或DBA来说,这篇文章提供了一个非常清晰的、分场景的解决方案参考,避免了自己摸索可能遇到的数据丢失或转换错误问题。

IT 累计浏览 2,388

ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

这篇技术分享讲的是一个常见但容易混淆的数据库操作细节:如何在查询时限制返回的数据条数。作者以一个包含7条记录的员工信息表为例,分别演示了在ORACLE和SYBASE两种主流数据库中的实现方式。 在ORACLE中,核心是利用伪列`rownum`,直接在`WHERE`子句中加入`rownum <= 5`这样的条件即可,简洁直观。而在SYBASE里,则需要通过`set rowcount 5`语句来设置,但紧接着必须用`set rowcount 0`将其重置,否则这个限制会持续影响后续所有查询操作,这是一个需要特别注意的关键陷阱。 文章的价值在于,通过最简单的示例,清晰地揭示了这两种数据库在语法和用法逻辑上的根本差异。对于需要处理海量数据、必须进行分批查询以保证系统稳定性的开发者而言,掌握这些具体语法并警惕其中的“坑”,是写出高效、健壮SQL语句的基础。