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

标签:SQL

共 176 篇相关文章

IT 累计浏览 3,768

MySQL 并行了吗?

这篇讲的是MySQL并行能力的一个常见误解。作者从与同行的讨论出发,直接给出了明确结论:MySQL目前并不具备针对单个查询的并行执行能力。文章特别澄清了MySQL 5.4版本带来的性能提升本质——它提高的是系统处理并发请求的吞吐量,而非缩短单条查询的响应时间。这意味着,如果应用场景侧重于单个复杂查询的执行速度,升级到5.4版本后,其表现可能反而不如5.1或更早的版本。作者指出,5.4的优化方向在于“并发量”,而非“单语句效率”,这对需要精准评估版本升级价值的开发者来说,是一个关键的技术辨析。

IT 累计浏览 3,412

Mysql 4.1升级到5.0以后一个很郁闷的地方

这篇文章讲述了一个MySQL从4.1升级到5.0版本后,开发者遇到的典型兼容性问题。作者从升级后应用程序报错、字符集相关的SQL执行失败这一具体困境出发,逐步定位到了根源:MySQL 5.0默认使用了`utf8mb3`字符集,而原先4.1中广泛使用的`utf8`实际上是指`utf8mb3`,但在某些新场景下(如存储emoji表情)会产生不兼容。 作者详细剖析了两者在存储容量、排序规则以及与`utf8mb4`关系上的关键差异,并给出了一个清晰的解决方案:评估业务需求后,统一将表和连接的字符集显式设置为`utf8mb4`。文章不仅解决了升级后的“郁闷”报错,更厘清了MySQL字符集家族长期以来容易混淆的概念,为后续的数据库迁移和设计提供了明确的参考。

IT 累计浏览 2,961

mysql的权限信息的存储

作者从一个普遍存在的误解切入——许多人以为MySQL的用户权限信息只放在mysql.user

IT 累计浏览 2,907

批量处理多个表

这篇讲的是如何高效解决数据库管理中批量操作多个表的难题。作者从实际工作场景出发,发现并记录了一个来自xaprb的实用工具,它能帮助开发者自动化地对一批数据表执行统一操作,例如批量添加字段、修改索引或进行结构变更,从而避免了重复手动执行SQL脚本的繁琐与风险。文章重点展示了该工具的核心思路:通过简单配置,即可将原本需要逐表处理的重复劳动,转化为一键完成的批量任务,显著提升了数据库维护的效率和准确性。对于经常需要面对表结构升级或数据迁移的DBA和后端开发者来说,这种工具的实践思路提供了清晰的解决方案。

IT 累计浏览 2,605

Sql语句优化注意

这篇讲的是SQL查询中一个常见但容易被忽视的性能陷阱。作者直接指出,在WHERE条件中对列名施加函数(如使用`DATE(create_time)`)是一个典型的反模式。这种写法会导致数据库无法有效利用该列上已建立的索引,从而迫使查询进行全表扫描,随着数据量增长,性能会急剧下降。 文章的核心建议非常明确:将处理逻辑从列名转移到常量值上。例如,不写`WHERE YEAR(create_time) = 2023`,而应改为`WHERE create_time >= '2023-01-01' AND create_time < '2024-01-01'`。这样,数据库就能直接使用索引来快速定位到符合条件的时间范围,查询效率得到保障。 虽然文章篇幅短小,但它点出的这个原则是SQL优化中“让索引有效工作”的关键一步。这个思路同样适用于字符串截取(如`SUBSTRING(name, 1, 3)`)等其他函数操作,提醒我们在编写查询时要始终考虑其对索引的影响。

IT 累计浏览 2,712

武汉校园招聘归来

作者上个星期作为面试官,在武汉经历了两天半密集的校园招聘,累计面试约40人。由于DBA岗位的候选人只有14位,作者还协助面试了C++开发和系统工程师岗位的候选人。 一个值得注意的现象是,前来应聘的绝大多数是硕士研究生,本科生不到十位,博士生则仅有一位。这种学历分布与之前在南京的招聘情况类似。作者在文中分享了作为技术面试官的直观感受与观察,比如不同技术栈岗位的候选人数量差异,以及高校人才供给的现状。对于关注技术招聘市场、尤其是后端与基础架构岗位的读者而言,文中具体的面试官视角和一线数据,提供了比宏观报告更生动的参考。

IT 累计浏览 2,742

常用的数据库管理SQL语句(二)

这篇文章是“常用数据库管理SQL语句”系列的续篇,承接第一篇的基础,将镜头聚焦于日常运维与开发中更进阶、更具体的操作场景。它系统性地梳理了一系列在数据库生命周期管理中频繁用到的SQL命令。 具体内容上,文章从如何高效创建与维护索引讲起,详细说明了ALTER INDEX和DROP INDEX等语句的典型用法。接着,它深入用户权限管理这一核心安全环节,演示了GRANT、REVOKE和CREATE USER等语句如何构建精细化的访问控制。此外,文章还覆盖了事务控制(如BEGIN、COMMIT、ROLLBACK)以确保数据一致性,以及使用ALTER TABLE修改表结构、TRUNCATE TABLE快速清空数据等实用技巧。 作者通过清晰的语法示例和场景化说明,将这类分散的管理语句串联起来,形成了一个从优化、安全到日常维护的完整知识闭环。对于需要独立管理数据库或参与后端开发的读者来说,这提供了一份即查即用的实用参考。

IT 累计浏览 3,843

常用的数据库管理SQL语句(一)

这篇文章汇总了作者在日常数据库管理中反复使用的SQL语句,从基础的备份恢复到性能监控,覆盖了多个关键场景。作者从一线运维经验出发,不仅列出了常用命令,更清晰地阐述了每条语句的适用情境与核心作用,例如区分了全量备份与增量备份在数据安全策略中的不同选择,或是通过哪些查询快速定位慢查询瓶颈。对于数据库管理员或后端开发者而言,这份清单省去了重复查阅文档的时间,将分散的知识点串联成了可直接套用的实践指南。无论是应对日常维护还是突发状况,这些凝练的语句都能帮助提升操作效率,减少人为失误。

IT 累计浏览 3,512

mysql数据库查询优化

作者从自己在两周内实际提升MySQL查询速度的经历出发,记录了优化过程中的思考与取得的效果。这篇文章并非空谈理论,而是聚焦于一个具体问题:数据库查询变慢了,该怎么办? 文中详细复现了作者的排查与尝试路径。从最初面对查询缓慢的“症状”,到逐步定位可能的瓶颈——比如是低效的SQL语句、缺失的索引,还是不合理的表结构?作者很可能分享了他如何分析慢查询日志、尝试添加复合索引,或是重写了某些关键查询的具体过程。文章的核心价值在于这种“手把手”的调试记录,它把一个常见的性能优化任务拆解成可循的步骤。 对于经常需要与数据库打交道的开发者或DBA来说,这类来自一线实战的复盘尤其宝贵。它展示的不仅是几个优化技巧,更是一种面对性能问题时,从现象入手、逐步假设并验证的排查思路,能为读者自己解决类似难题提供直接的参考。

IT 累计浏览 3,471

MySQL 内部函数简介

这篇文章梳理了MySQL内置函数的核心分类与应用场景。作者从开发者日常高频操作切入,重点演示了算术运算子、字符串函数、日期处理函数等几类常用函数的用法差异。 例如,算术运算子不仅包含基础的加减乘除,还涉及取模、整除等容易忽略的细节;字符串函数则对比了`CONCAT`与`CONCAT_WS`在处理空值时的不同表现。文章通过具体SQL示例,展示了如何利用`IFNULL`简化空值判断,以及`DATE_FORMAT`在报表场景下的灵活应用。 掌握这些函数能直接提升查询效率,避免在业务逻辑中重复编写基础运算代码。文末汇总了函数使用中的常见陷阱,比如隐式类型转换导致的计算偏差,对实际开发有明确的避坑指导意义。

IT 累计浏览 4,752

MySQL介绍和性能优化 (PPT/PDF)

这篇讲的是MySQL数据库的基础认知与性能优化实践,以技术演示文稿的形式,系统梳理了从核心概念到调优技巧的关键知识。作者从“什么是MySQL”这一基本问题出发,快速搭建认知框架,随后深入到性能优化的核心战场。 文章的价值在于它不只罗列参数,而是将优化思路融入具体场景。比如,它清晰区分了索引优化、查询缓存调整和服务器配置升级等不同层级的手段,解释了每个措施解决的具体瓶颈——是减少了磁盘I/O,还是降低了CPU负载。通过对比优化前后的查询执行计划与响应时间,直观展示了不同策略的实际收益。 尤其值得一提的是,其中关于InnoDB存储引擎的内存与锁机制分析,揭示了许多性能问题的根源,比如为何看似简单的更新操作会变慢。这些内容让抽象的优化原则变得可操作。整个分享从原理到实例,为开发者提供了一份可以直接应用的MySQL性能诊断与调优指南。

IT 累计浏览 1,660

Oracle的rownum原理和使用

这篇文章深入剖析了Oracle中rownum的底层原理与实践用法。作者没有停留在简单的语法介绍,而是详细拆解了rownum作为“伪列”在查询执行过程中的生成时机与处理逻辑——它是在WHERE条件处理之后、排序(ORDER BY)和聚合之前赋予行号的。文章特别澄清了一个常见误区:由于rownum总是从1开始连续生成,直接使用“where rownum > 10”永远无法返回结果,必须借助子查询或分析函数(如ROW_NUMBER())来实现对特定范围行的提取。 在应用层面,内容重点讲解了如何利用rownum实现经典的高效分页查询,并对比了不同的写法与性能差异。同时,文章也提及了rownum与rowid的本质区别:前者是逻辑上的行序,后者是物理存储地址。通过具体的SQL示例和逻辑分析,读者能清楚地理解在开发报表、列表页面等需要分页功能的场景中,如何正确且高效地运用这一特性。整体讲解由原理到实践,对理解Oracle查询的执行顺序和优化分页逻辑很有帮助。

IT 累计浏览 3,792

根据status信息对MySQL服务器进行优化(一)

这篇讲的是MySQL性能优化中容易被忽略的一条路径:不要只照搬通用的配置模板,而是学会“倾听”服务器自己的运行状态。作者从实际运维经验出发,指出了网上那些脱离具体硬件和应用场景的配置建议的局限性,核心思路是等待MySQL稳定运行一段时间后,去分析它的status信息——这相当于给数据库做了一次“全面体检”。 文章强调,这些状态数据里藏着真实的性能瓶颈线索。比如,通过关注诸如查询缓存(Query Cache)命中率、线程连接情况、表锁或行锁的等待时间等具体指标,我们能发现通用配置下未被暴露的问题:可能是某个高频查询未使用索引,也可能是内存分配不合理导致了频繁交换。作者传递的方法论是,优化应始于诊断,基于数据,而非盲目调整参数。 这种方法让优化工作更具针对性,能直接对准业务负载下的实际痛点,避免了“一刀切”可能引发的副作用。对于需要让MySQL发挥出更佳性能的运维人员和开发者来说,学习解读这些内部“语言”是迈向深度调优的关键一步。

IT 累计浏览 3,032

Mysql查询优化器浅析(下)

这篇讲的是MySQL查询优化器中的存取类型,作者从“下篇”延续上文,聚焦于第七部分“存取类型”的深入解析。文章系统对比了ALL、index、range、ref、const等常见存取类型,详细阐述了它们各自的技术含义和性能差异。例如,ALL代表全表扫描,通常效率最低,适用于数据量极小的场景;而const则通过主键或唯一索引直接访问,效率最高,适合精确查询。作者通过实际案例和EXPLAIN输出示例,展示了如何识别查询的存取类型,并针对不同场景给出优化建议。比如,在范围查询中,range类型比index更

IT 累计浏览 3,394

REPLACE INTO 为什么返回”2 rows affected”

这篇讲的是当使用 `REPLACE INTO` 插入数据时,为何有时会看到“2 rows affected”的返回结果,以及这背后可能隐藏的坑。作者从这个常见的困惑现象切入,深入解释了 `REPLACE INTO` 的实际执行逻辑:它并非总是简单插入,当主键或唯一索引发生冲突时,MySQL 会先执行 `DELETE` 再执行 `INSERT`。因此,“2 rows affected”通常意味着原有一行数据被删除,然后插入了一行新数据,总计影响了两行。 文章还进一步对比了 `REPLACE INTO` 与 `INSERT ... ON DUPLICATE KEY UPDATE` 这两种“存在即更新”方案的差异。作者指出,如果表上定义了多个唯一索引,且插入的数据行同时与多条现有记录冲突,`REPLACE INTO` 的行为会变得更加不可预测(它会删除所有冲突行),而 `ON DUPLICATE KEY UPDATE` 则能精确更新所冲突的行。 通过清晰的分析和对比,文章最终澄清了这个“2 rows affected”的真相,帮助开发者更安全、更精准地选择使用哪种数据插入或更新策略,避免因误解行为而导致数据意外丢失。

IT 累计浏览 3,068

mysql cache功能小记

这篇讲的是MySQL中广受关注但又颇具争议的查询缓存(Query Cache)功能。作者从“它到底该开还是该关”这个经典问题出发,深入剖析了其背后的工作原理。 核心机制是,当查询的SQL语句和涉及的表完全一致时,MySQL会直接返回上一次查询的结果集,省去了解析、优化和执行的过程。但它的触发条件非常苛刻:查询中任何微小的差异(比如多一个空格),或者表结构、数据被更新,都会导致缓存失效。这意味着,在写操作频繁的业务场景下,缓存的命中率可能极低,反而会消耗资源去检查和维护。 文章也点明了配置层面的影响,比如`query_cache_type`和`query_cache_size`的设置。更重要的是,它指出了一个常被忽视的陷阱:在并发较高时,锁争用问题可能导致性能不升反降。对于大部分现代应用,尤其是采用InnoDB引擎并支持MVCC的场景,作者暗示了MySQL 5.7之后逐渐弃用此功能的原因。理解这些,就能明白为什么很多经验之谈都是建议直接关闭查询缓存,把优化重点放在索引和SQL语句本身上。

IT 累计浏览 4,690

如何建立索引

索引是一把双刃剑,建立得当能极大提升查询效率,滥用则会拖慢写入速度、占用额外存储。这篇文章没有罗列抽象的理论,而是从实际开发中的高频场景出发,为读者梳理了一套清晰的索引决策指南。 文章具体分析了哪些查询模式(如等值查询、范围查询、排序操作)最能受益于索引,同时也明确指出了索引可能失效或成为负担的情况,例如在频繁更新的小表上,或者对区分度很低的字段建索引。作者通过对比这些场景下的性能差异,揭示了索引背后的核心原理:它本质上是用空间和写入开销来换区间的快速定位能力。 理解这一点,就能避免“为所有字段都加上索引”的常见误区。文章最终引导读者根据查询特点、数据分布和更新频率这三个关键因素,来判断何时该建立索引、为哪个字段建立何种类型的索引,从而做出真正能提升数据库整体性能的合理设计。

IT 累计浏览 2,843

在oracle中使用自增字段

MySQL里的AUTO_INCREMENT用起来顺手,可Oracle天生不认这个语法。如果你从其他数据库转到Oracle,需要实现自增主键,这篇文章提供了一个经典且可靠的替代方案。 作者开门见山,指出Oracle可以通过创建序列(Sequence)对象来模拟自增行为。文章的核心是讲解Sequence的基本使用语法,比如用`CREATE SEQUENCE`命令创建一个名为SEQ的序列对象。在插入数据时,通过调用`SEQ.NEXTVAL`来获取下一个递增的序列值,用`SEQ.CURRVAL`则可以查询当前已生成的最新值。 文章虽然篇幅不长,但抓住了在Oracle中实现自增字段这一特定场景的关键点。它没有深入探讨更复杂的触发器模拟或标识列等方法,而是专注于最直接、最常用的序列方案。这对于需要快速上手Oracle数据库开发的读者来说,是一个明确的起点。理解了Sequence的机制,也就掌握了Oracle处理有序数据生成的核心工具之一,这个机制在数据一致性、事务支持和并发控制上都有其固有的优势。

IT 累计浏览 3,292

MySQL 5.1 的参数简表

这篇文章整理了一份 MySQL 5.1 的系统变量简表,包含了多达 303 个参数。表格详细列出了每个参数名、在 Linux 命令行、配置文件及 mysql 命令行中的设置方式、参数作用级别(如 Global、Session 或 Both),以及是否支持动态修改。 比如,像 `back_log` 这种核心连接参数就明确标注了其为全局级别且不可动态修改,而 `autocommit` 这类会话变量则反之。这份简表清晰地呈现了不同配置路径和生效范围,让原本散落在官方文档各处的细节变得一目了然。 对于经常需要在不同环境(测试、生产)下调整 MySQL 配置的 DBA 或开发人员来说,它解决了快速查阅的痛点。无论是想确认某个参数能否在运行时调整,还是排查配置不生效的原因(比如级别不对),这份整理好的速查表都能提供直接参考,省去了反复翻阅文档的时间。

IT 累计浏览 2,021

怪异ORA-01502,创建唯一约束却无唯一索引

这篇讲的是一个数据库开发中可能遇到的诡异错误:明明已经创建了唯一约束,系统却抛出ORA-01502错误,提示没有唯一索引。作者从实战角度出发,还原了这个问题的排查过程。核心发现直指Oracle约束与索引的一个隐晦机制——唯一约束并不会总是自动创建唯一索引,尤其当表已存在非唯一索引时,数据库可能会“自作主张”地复用它,最终导致约束无法建立。 文章深入分析了约束定义与底层索引生成规则之间的微妙关系,点出了问题的根源:Oracle在特定条件下,优先复用已有索引的逻辑与开发者对唯一约束的直觉预期产生了冲突。作者不仅说清楚了故障现象和根因,还提供了清晰的解决路径,包括如何正确检查索引状态以及通过显式创建唯一索引来规避此问题。对于常与Oracle打交道的开发者来说,这篇内容揭开了一个容易被忽略的“坑”,有助于在设计表结构时更精准地控制约束与索引。