CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
数据存储

【数据存储】慢查询治理:定位与改写十条典型慢 SQL

2026-09-23 17:00 作者:996 技术组 996引擎Lua教程传奇脚本

实战应用:用在哪里

排行榜卡三秒、交易行搜索转圈五秒——慢查询是玩家能直接感知的性能债。慢查询治理的套路是三步:慢日志定位、执行计划找根因、改写或加索引收尾,十条典型慢 SQL 的改写范式覆盖九成场景。

慢日志的定位

lua

---慢查询的捕获:超 200 毫秒入榜
setontimerex(72, 60)
function SlowLog.collect()
    local rows = DB.query(
        "SELECT query, exec_ms, rows_examined " ..
        "FROM slow_log WHERE exec_ms > 200 " ..
        "ORDER BY exec_ms DESC LIMIT 10")
    for _, r in ipairs(rows) do
        Ops.log(("慢查询 %dms 扫 %d 行: %s"):format(
            r.exec_ms, r.rows_examined, r.query:sub(1, 80)))
    end
end

慢日志按 200 毫秒的门槛捕获,每分钟输出前十名。执行时间与扫描行数的双指标定位根因:扫百万行返回十行的查询必是索引缺失,扫千行返回千行的查询是数据量本身的问题。捕获的样本按指纹聚合,同一形态的慢查询反复上榜只需治理一次。

改写的范式

lua

---范式一:SELECT * 改按需取列
-- 慢:SELECT * FROM roles ORDER BY level DESC LIMIT 50
local top = DB.query(
    "SELECT id, name, level FROM roles " ..
    "ORDER BY level DESC LIMIT 50")

---范式二:函数包列让索引失效,改为范围条件
-- 慢:WHERE DATE(create_at) = '2026-09-21'
local rows = DB.query(
    "SELECT COUNT(*) FROM item_log " ..
    "WHERE create_at >= ? AND create_at < ?",
    "2026-09-21 00:00:00", "2026-09-22 00:00:00")

十条范式的精华三条:SELECT * 改按需取列,网络与内存的传输量按需收缩;列上包函数(DATE、SUBSTR)让索引失效,改写成范围条件让索引活着;大分页的 LIMIT 100000,50 改成游标条件(WHERE id > 上次末尾 LIMIT 50),翻页越深越快的假象被游标打破。交易行搜索的组合条件用联合索引按最左前缀排列,价格的区间与品质的等值组合一索引吃下。索引的补充用执行计划验证:改动前后 EXPLAIN 的扫描行数对比,行数不降的索引是多余的写放大。

验证与监控

改写前后的耗时对比进工单,收益低于 30% 的改动不合并;慢查询的上榜数周报,治理的速度要跑赢业务的增长。

踩坑记录

索引曾经加了一堆不见效,联合索引的列序与查询条件不符,最左前缀的规则吃透后一次到位。ORM 的隐式类型转换让索引失效,字符串列用数字比较全表扫描,类型的严格匹配写进评审。统计类的查询曾经直打主库,治理时顺带迁去从库,查询的治理与路由一并考虑。

上线要点

慢查询的门槛按接口分级:交易行 300 毫秒、排行 500 毫秒,一刀切的门槛误伤长尾。索引的变更走评审与从库验证,写放大与查询收益的账一起算。十条范式的文档进新人培训,治理的能力要可复制。

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

玩法策划发展基金基金投入

【玩法策划】行会发展基金:基金投入与回报体系

实战应用:用在哪里 行会建设需要资金,成员的投入却看不到回报。行会发展基金让成员按份投入行会基金,基金用于行会建设与集体活动…

2026-09-23 21:16 996 技术组
玩法策划沙城巡逻队巡逻排班

【玩法策划】沙城巡逻队:巡逻任务的排班与奖励设计

实战应用:用在哪里 占领沙巴克后的日常维护靠几个人,城内挂机广告无人管,安全区成了法外之地。沙城巡逻队把城防日常做成排班玩法…

2026-09-23 21:16 996 技术组
后端接口行会仓库整理清理

【后端接口】行会仓库整理:物品归类与批量清理的接口

实战应用:用在哪里 行会仓库运营数月后杂物堆积:过期活动道具、低级材料、重复装备混杂在贵重物资之间。仓库整理接口按价值与用途…

2026-09-23 21:16 996 技术组
案例复盘客服口径统一话术复盘

【案例复盘】客服口径统一:三次答复不一的投诉风暴

实战应用:用在哪里 一次活动奖励少发,三名客服给出三种答复:补发、不补发、等通知。玩家把三张截图拼在一起发到论坛,一场本可善…

2026-09-23 21:16 996 技术组
前端接口称号预览预览切换

【前端接口】称号预览:佩戴效果的预览与切换

实战应用:用在哪里 玩家拥有多个称号,切换佩戴后效果不符预期又要来回换。称号预览在切换前展示佩戴效果:名字上方的称号样式、属…

2026-09-23 21:16 996 技术组
引擎触发赤月巢穴狂暴阈值魔龙教主

【引擎触发】赤月巢穴:魔龙教主的狂暴阈值触发

实战应用:用在哪里 赤月巢穴的魔龙教主血量降至三成会进入狂暴:攻击翻倍、召唤赤月护卫、周期性释放全屏魔龙血域。狂暴触发把 b…

2026-09-23 21:16 996 技术组