当前位置: 代码网 > it编程>数据库>Mysql > MySQL中实用且高频的SQL工具与脚本分享

MySQL中实用且高频的SQL工具与脚本分享

2025年06月27日 Mysql 我要评论
一、实用且高频的 sql 工具脚本以下是一些实用且高频的 sql 工具脚本代码示例,涵盖数据库维护、性能优化、数据操作等场景,适用于 mysql、postgresql 等主流数据库:1. 数据库维护类

一、实用且高频的 sql 工具脚本

以下是一些实用且高频的 sql 工具脚本代码示例,涵盖数据库维护、性能优化、数据操作等场景,适用于 mysql、postgresql 等主流数据库:

1. 数据库维护类

1.1 数据库备份与恢复

-- mysql 备份单表(导出结构和数据)
mysqldump -u 用户名 -p 数据库名 表名 > backup_table.sql

-- postgresql 备份整个数据库
pg_dump -u 用户名 -d 数据库名 > backup_db.sql

-- 恢复备份(通用)
mysql -u 用户名 -p 数据库名 < backup.sql
psql -u 用户名 -d 数据库名 -f backup.sql

1.2 批量生成表结构文档

-- mysql 查询所有表结构
select 
    table_name as 表名,
    column_name as 字段名,
    data_type as 数据类型,
    column_comment as 描述
from 
    information_schema.columns
where 
    table_schema = '数据库名';

2. 性能优化类

2.1 索引分析与优化

-- mysql 查看未使用索引的表
select 
    object_schema, object_name, index_name
from 
    performance_schema.table_io_waits_summary_by_index_usage
where 
    index_name is not null
    and count_star = 0;

-- postgresql 查找缺失索引
select 
    relname as 表名,
    seq_scan - idx_scan as 全表扫描次数差,
    case 
        when seq_scan - idx_scan > 0 then '建议添加索引'
        else '无需优化'
    end as 建议
from 
    pg_stat_all_tables
where 
    schemaname = 'public';

2.2 检测长时间运行的查询

-- mysql 查看正在执行的慢查询
show full processlist;
-- 或通过慢查询日志分析(需提前开启配置)

-- postgresql 监控活跃查询
select 
    pid, query, now() - query_start as 执行时长
from 
    pg_stat_activity
where 
    state = 'active'
    and query not like '%pg_stat_activity%';

3. 数据操作类

3.1 批量插入/更新

-- 批量插入(mysql/postgresql通用)
insert into users (name, age) values
('alice', 25),
('bob', 30),
('charlie', 28);

-- 批量更新(mysql)
update users
set status = case id
    when 1 then 'active'
    when 2 then 'inactive'
end
where id in (1, 2);

-- 批量更新(postgresql)
update users as u
set status = tmp.status
from (values
    (1, 'active'),
    (2, 'inactive')
) as tmp(id, status)
where u.id = tmp.id;

3.2 数据去重

-- 通用:删除重复记录(保留id最大的一条)
delete from orders
where id not in (
    select max(id)
    from orders
    group by order_no
);

3.3 分页查询优化

-- mysql(limit-offset)
select * from products 
order by id
limit 10 offset 20;  -- 第3页,每页10条

-- postgresql(窗口函数高效分页)
select * from (
    select *, row_number() over (order by id) as row_num
    from products
) as tmp
where row_num between 21 and 30;

4. 监控与安全类

4.1 用户权限检查

-- mysql 查看用户权限
show grants for '用户名'@'主机';

-- postgresql 列出所有用户角色
select rolname, rolcreaterole, rolsuper 
from pg_roles;

4.2 表空间监控

-- mysql 查看表大小
select 
    table_name as 表名,
    round((data_length + index_length) / 1024 / 1024, 2) as 大小(mb)
from 
    information_schema.tables
where 
    table_schema = '数据库名'
order by 
    (data_length + index_length) desc;

-- postgresql 查看数据库大小
select 
    pg_size_pretty(pg_database_size('数据库名')) as 大小;

5. 动态 sql 与数据清洗

5.1 动态生成条件查询

-- 示例:根据参数动态筛选(伪代码逻辑)
set @sql = concat('
    select * from orders 
    where 1=1
    ', if(region is not null, ' and region = ?', ''),
    ' order by create_time desc'
);
prepare stmt from @sql;
execute stmt using region_value;

5.2 数据清洗(拆分字段)

-- mysql 拆分逗号分隔的字符串
select 
    id,
    substring_index(substring_index(tags, ',', n), ',', -1) as tag
from 
    products
cross join 
    (select 1 as n union select 2 union select 3) numbers
where 
    n <= length(tags) - length(replace(tags, ',', '')) + 1;

-- postgresql 使用 regexp_split_to_table
select 
    id, 
    regexp_split_to_table(tags, ',') as tag
from 
    products;

注意事项

  • 数据库差异:部分语法需根据 mysql、postgresql 等调整(如分页、字符串函数)。
  • 权限控制:部分操作需要管理员权限(如 pg_stat_activity 查询)。
  • 生产环境:慎用 delete/update,操作前先备份数据(如 create table backup as select * from table)。

二、实用且高频的 sql 脚本工具

以下是一些实用且高频的sql脚本工具推荐,涵盖性能优化、审计、分析等场景,结合功能特点与适用场景进行说明:

1. mysqltuner.pl

功能:mysql性能诊断工具,分析参数配置、存储引擎、日志文件等,提供优化建议。

适用场景:快速定位mysql内存、连接数、缓存等配置问题。

特点

支持mysql/mariadb/percona server,覆盖约300项指标。

报告标记关键问题(如[!!]),并给出“recommendations”优化建议。

使用示例

wget https://raw.githubusercontent.com/major/mysqltuner-perl/master/mysqltuner.pl  
./mysqltuner.pl --socket /var/lib/mysql/mysql.sock  

2. pt-query-digest

功能:percona toolkit中的慢查询日志分析工具,生成详细报告。

适用场景:分析mysql慢查询,识别高负载sql语句。

特点

支持从日志、进程列表或tcp抓包分析查询。

提供执行时间分布、top sql排名等统计信息。

使用示例

pt-query-digest /var/lib/mysql/slow.log > slow_report.log  
# 分析指定时间范围  
pt-query-digest --since '2025-04-28 00:00:00' --until '2025-04-29 00:00:00' slow.log  

3. yearning

功能:sql审计平台,规范工单提交与执行流程。

适用场景:团队协作中避免误操作,记录sql执行历史。

特点

支持工单审核、权限控制、自动生成回滚语句。

提供可视化界面,兼容99%的mysql语法。

部署

支持自定义审核流程,适合中小团队使用。

4. qwerybuilder

功能:多数据库脚本管理工具,支持跨平台操作。

适用场景:管理多种数据库(如sql server、oracle、mysql)的脚本与架构。

特点

提供差异对比、自动格式化、数据库搜索等功能。

集成winmerge进行对象差异分析,支持自定义代码片段。

适用性:适合需统一管理异构数据库的环境。

5. percona toolkit(含pt-variable-advisor)

功能:mysql参数分析与优化建议。

适用场景:检查变量配置合理性(如缓冲池大小、线程配置)。

特点

识别潜在问题并标记为warn,如不合理的超时设置。

使用示例

pt-variable-advisor localhost --socket /var/lib/mysql/mysql.sock  

6. tuning-primer.sh

功能:mysql性能调优脚本,提供针对性建议。

适用场景:快速获取内存、查询缓存等优化建议。

特点

输出红色警告提示关键问题,如未优化的查询缓存配置。

使用示例

wget https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh  
./tuning-primer.sh  

总结

  • 性能优化:优先使用mysqltuner.plpt-query-digest快速定位问题。
  • 团队协作:采用yearning规范sql执行流程,避免生产事故。
  • 多数据库管理qwerybuilder适合异构环境脚本统一管理。

到此这篇关于mysql中实用且高频的sql工具与脚本分享的文章就介绍到这了,更多相关sql实用脚本内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • MySQL之InnoDB存储引擎中的索引用法及说明

    MySQL之InnoDB存储引擎中的索引用法及说明

    1、背景innodb存储引擎的基本存储单位是页,索引也是存储在页上的,b+树中非叶子节点的页也是数据页,和我们插入数据的区别是存放的行记录叫目录项记录,我们插入... [阅读全文]
  • mysql中的服务器架构详解

    mysql中的服务器架构详解

    1、背景简单理解一下mysql的服务器架构。2、mysql服务器架构解释mysql的架构图如下:主要分为三部分:客户端、服务端、存储引擎。接下来我们来解释一下各... [阅读全文]
  • MySQL之InnoDB中的锁用法

    MySQL之InnoDB中的锁用法

    1、背景为了满足数据库对数据的一致性、事务隔离性、高并发性能需求,就有了锁机制,innodb的锁机制是实现事务隔离性和并发控制的核心组件,接下来就来讲一下锁机制... [阅读全文]
  • MySQL之InnoDB中的MVCC用法

    MySQL之InnoDB中的MVCC用法

    1、背景mvcc叫做多版本并发控制,通过维护数据的多个历史版本实现读写分离:读操作访问快照版本,无需加锁,避免阻塞写操作;写操作创建新版本,不影响其它事务的读操... [阅读全文]
  • MySQL之undo日志页结构详解

    1、背景之前讲过undo日志类型,本篇文章再来具体讲解一下undo日志页结构。2、undo日志页结构【1】fil_page_undo_log页innodb中最基本的存储单位是页,u…

    2025年06月26日 数据库
  • MySQL中的undo日志类型使用

    MySQL中的undo日志类型使用

    1、背景事务的回滚机制是通过undo日志来实现的,我们只需要对insrt、delete、update操作记录回滚日志,select不需要记录回滚日志,这三种操作... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com