返回顶部
M

MariaDBMariaDB查询优化

Write efficient MariaDB queries with proper indexing, temporal tables, and clustering.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
932
下载量
免费
免费
2
收藏
概述
安装方式
版本历史

MariaDB

字符集

  • - 始终对表和连接使用 utf8mb4——支持包括表情符号在内的完整Unicode
  • 使用 utf8mb4unicodeci 实现正确的语言排序,utf8mb4_bin 用于字节比较
  • 设置连接字符集:SET NAMES utf8mb4 或在连接字符串中设置
  • JOIN中的排序规则不匹配会强制转换——会破坏索引使用

索引

  • - TEXT/BLOB列需要前缀长度:INDEX (description(100))
  • 复合索引顺序很重要——(a, b) 服务于 WHERE a=? 但不服务于 WHERE b=?
  • 外键在子表上自动创建索引——但需用 SHOW INDEX 验证
  • 覆盖索引:包含所有SELECT列以避免回表查询

序列

  • - CREATE SEQUENCE seqname 用于跨表生成保证唯一的ID
  • NEXT VALUE FOR seqname 获取下一个值——事务回滚后仍有效
  • 当需要在插入前获取ID时,优于自增列
  • SETVAL(seq_name, n) 重置序列——对迁移很有用

系统版本控制(时态表)

  • - ALTER TABLE t ADD SYSTEM VERSIONING 追踪所有历史变更
  • FOR SYSTEMTIME AS OF 2024-01-01 00:00:00 查询过去状态
  • FOR SYSTEMTIME BETWEEN start AND end 查询变更历史
  • 不可见列 rowstart 和 rowend 存储有效期

JSON处理

  • - JSONVALUE(col, $.key) 提取标量值,未找到时返回NULL
  • JSONQUERY(col, $.obj) 提取对象/数组,保留引号
  • JSONTABLE() 将JSON数组转换为行——对展开嵌套数据非常强大
  • 如果列不是严格类型,插入前使用 JSONVALID()

Galera集群

  • - 所有节点可写——但同一行的冲突会导致回滚
  • 关键读取前设置 wsrepsyncwait = 1——确保节点已同步
  • 保持事务短小——大事务增加冲突概率
  • wsrepclustersize 应为奇数——避免脑裂

窗口函数

  • - ROW_NUMBER() OVER (PARTITION BY x ORDER BY y) 用于组内排名
  • LAG(col, 1) OVER (ORDER BY date) 获取上一行值
  • SUM(amount) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING) 计算累计总和
  • 使用 WITH cte AS (...) 的CTE编写可读性强的复杂查询

线程池

  • - 通过 threadhandling=pool-of-threads 启用——优于每连接一线程
  • threadpool_size = CPU密集型场景设为CPU核心数,I/O密集型场景设更高
  • 减少大量并发连接下的上下文切换
  • 使用 SHOW STATUS LIKE Threadpool% 监控

存储引擎

  • - InnoDB默认——ACID事务、行级锁、崩溃恢复
  • Aria用于临时表——MyISAM的崩溃安全替代品
  • MEMORY用于缓存——重启后数据丢失,但速度快
  • 检查引擎:SHOW TABLE STATUS WHERE Name=table

锁机制

  • - SELECT ... FOR UPDATE 锁定行直到提交
  • LOCK TABLES t WRITE 用于类似DDL的独占访问——阻塞所有其他会话
  • 死锁自动检测——一个事务被回滚;必须重试
  • innodblockwait_timeout 默认50秒——交互式应用应设更低

查询优化

  • - EXPLAIN ANALYZE 查看实际执行时间(10.1+)
  • optimizertrace 深入分析:SET optimizertrace=enabled=on
  • 优化器选择错误索引时使用 FORCE INDEX (idx)
  • STRAIGHT_JOIN 强制连接顺序——最后手段

备份与恢复

  • - mariadb-dump --single-transaction 无锁一致性备份
  • mariadb-backup 热备份InnoDB——支持增量备份
  • 二进制日志用于时间点恢复:mysqlbinlog binlog.000001 | mariadb
  • 定期测试恢复——无法恢复的备份不是真正的备份

常见错误

  • - Too many connections——增加 max_connections 或使用连接池
  • Lock wait timeout exceeded——使用 SHOW ENGINE INNODB STATUS 查找阻塞查询
  • Row size too large——TEXT/BLOB存储在页外,但行指针有限制
  • Duplicate entry for key——检查唯一约束,使用 ON DUPLICATE KEY UPDATE

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 mariadb-1776420071 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 mariadb-1776420071 技能

通过命令行安装

skillhub install mariadb-1776420071

下载

⬇ 下载 MariaDB v1.0.0(免费)

文件大小: 2.73 KB | 发布时间: 2026-4-17 18:33

v1.0.0 最新 2026-4-17 18:33
Initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部