MySQL 很实用的 SQL 语句清单(排障与日常运维)

这篇只放"能直接用"的 SQL,小而实用,适合收藏。

一、查看连接与慢查询

sql 复制代码
-- 当前连接
SHOW PROCESSLIST;

-- 只看活跃中的 SQL
SELECT * FROM information_schema.PROCESSLIST
WHERE COMMAND <> 'Sleep'
ORDER BY TIME DESC;

-- 慢查询是否开启
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';

-- 最近慢查询文件位置
SHOW VARIABLES LIKE 'slow_query_log_file';

二、查看表大小与空间占用

sql 复制代码
SELECT
  table_schema,
  table_name,
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE table_schema = 'your_db'
ORDER BY size_mb DESC;

三、查看索引使用情况

sql 复制代码
-- 某表索引
SHOW INDEX FROM your_table;

-- 索引列顺序(组合索引很关键)
SELECT
  index_name,
  seq_in_index,
  column_name
FROM information_schema.STATISTICS
WHERE table_schema = 'your_db'
  AND table_name = 'your_table'
ORDER BY index_name, seq_in_index;

四、找出无主键表

sql 复制代码
SELECT t.table_schema, t.table_name
FROM information_schema.TABLES t
LEFT JOIN information_schema.TABLE_CONSTRAINTS c
  ON t.table_schema = c.table_schema
 AND t.table_name = c.table_name
 AND c.constraint_type = 'PRIMARY KEY'
WHERE t.table_schema = 'your_db'
  AND c.constraint_name IS NULL;

五、查看锁等待(排查阻塞)

sql 复制代码
-- InnoDB 锁等待
SELECT
  r.trx_id waiting_trx_id,
  r.trx_mysql_thread_id waiting_thread,
  r.trx_query waiting_query,
  b.trx_id blocking_trx_id,
  b.trx_mysql_thread_id blocking_thread,
  b.trx_query blocking_query
FROM information_schema.INNODB_LOCK_WAITS w
JOIN information_schema.INNODB_TRX r ON r.trx_id = w.requesting_trx_id
JOIN information_schema.INNODB_TRX b ON b.trx_id = w.blocking_trx_id;

六、查重复数据(最常用)

sql 复制代码
-- 查 user_id + mobile 的重复
SELECT user_id, mobile, COUNT(*) AS cnt
FROM user
GROUP BY user_id, mobile
HAVING cnt > 1;

七、批量去重(保留最小 id)

sql 复制代码
DELETE t1
FROM user t1
JOIN user t2
  ON t1.user_id = t2.user_id
 AND t1.mobile = t2.mobile
 AND t1.id > t2.id;

八、找出最近 N 天未更新的数据

sql 复制代码
SELECT *
FROM orders
WHERE update_time < NOW() - INTERVAL 30 DAY;

九、分页优化模板(避免深分页)

sql 复制代码
-- 基于游标翻页
SELECT id, create_time
FROM orders
WHERE (create_time < '2026-04-01 10:00:00'
   OR (create_time = '2026-04-01 10:00:00' AND id < 9527))
ORDER BY create_time DESC, id DESC
LIMIT 20;

十、快速生成批量插入语句

sql 复制代码
INSERT INTO dict (type, code, name) VALUES
('status', '0', '禁用'),
('status', '1', '启用'),
('status', '2', '删除');

十一、查看表行数(估算)

sql 复制代码
SELECT table_name, table_rows
FROM information_schema.TABLES
WHERE table_schema = 'your_db'
ORDER BY table_rows DESC;

十二、找出表里"最常见的值"

sql 复制代码
SELECT status, COUNT(*) AS cnt
FROM orders
GROUP BY status
ORDER BY cnt DESC
LIMIT 5;

最后总结

这份 SQL 清单不是"概念",而是我日常排障和运维最常用的那一批。

你可以直接复制用,遇到具体场景再精细化调整。

相关推荐
余槐i2 分钟前
Spring Boot 3.2 偶发500无日志:线程池复用导致请求上下文丢失
spring boot·redis·后端·mysql·性能优化
孤狼GPT26 分钟前
ChatGPT、Codex数据库实战:MyBatis-Plus第一页查询正常,翻到第10000页为什么越来越慢?
mysql·chatgpt·mybatis-plus·codex·深分页
Decay__32 分钟前
17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战
运维·数据库·sql·mysql·架构
Franciz小测测1 小时前
MySQL 增量备份实践:文件都在,为什么仍可能恢复失败?
数据库·mysql·binlog
w-w0w-w10 小时前
SQL注入
网络·数据库·sql
幽灵诶12 小时前
Mysql(基于测试的学习)
数据库·mysql
宇宙无敌暴龙战士66613 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊13 小时前
MySQL 的四种隔离级别
java·数据库·mysql
paopaokaka_luck15 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
这个DBA有点耶16 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范