MySQL中實(shí)用且高頻的SQL工具與腳本分享
一、實(shí)用且高頻的 SQL 工具腳本
以下是一些實(shí)用且高頻的 SQL 工具腳本代碼示例,涵蓋數(shù)據(jù)庫(kù)維護(hù)、性能優(yōu)化、數(shù)據(jù)操作等場(chǎng)景,適用于 MySQL、PostgreSQL 等主流數(shù)據(jù)庫(kù):
1. 數(shù)據(jù)庫(kù)維護(hù)類
1.1 數(shù)據(jù)庫(kù)備份與恢復(fù)
-- MySQL 備份單表(導(dǎo)出結(jié)構(gòu)和數(shù)據(jù)) mysqldump -u 用戶名 -p 數(shù)據(jù)庫(kù)名 表名 > backup_table.sql -- PostgreSQL 備份整個(gè)數(shù)據(jù)庫(kù) pg_dump -U 用戶名 -d 數(shù)據(jù)庫(kù)名 > backup_db.sql -- 恢復(fù)備份(通用) mysql -u 用戶名 -p 數(shù)據(jù)庫(kù)名 < backup.sql psql -U 用戶名 -d 數(shù)據(jù)庫(kù)名 -f backup.sql
1.2 批量生成表結(jié)構(gòu)文檔
-- MySQL 查詢所有表結(jié)構(gòu) SELECT TABLE_NAME AS 表名, COLUMN_NAME AS 字段名, DATA_TYPE AS 數(shù)據(jù)類型, COLUMN_COMMENT AS 描述 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '數(shù)據(jù)庫(kù)名';
2. 性能優(yōu)化類
2.1 索引分析與優(yōu)化
-- 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 全表掃描次數(shù)差, CASE WHEN seq_scan - idx_scan > 0 THEN '建議添加索引' ELSE '無(wú)需優(yōu)化' END AS 建議 FROM pg_stat_all_tables WHERE schemaname = 'public';
2.2 檢測(cè)長(zhǎng)時(shí)間運(yùn)行的查詢
-- MySQL 查看正在執(zhí)行的慢查詢 SHOW FULL PROCESSLIST; -- 或通過(guò)慢查詢?nèi)罩痉治觯ㄐ杼崆伴_(kāi)啟配置) -- PostgreSQL 監(jiān)控活躍查詢 SELECT pid, query, now() - query_start AS 執(zhí)行時(shí)長(zhǎng) FROM pg_stat_activity WHERE state = 'active' AND query NOT LIKE '%pg_stat_activity%';
3. 數(shù)據(jù)操作類
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 數(shù)據(jù)去重
-- 通用:刪除重復(fù)記錄(保留id最大的一條) DELETE FROM orders WHERE id NOT IN ( SELECT MAX(id) FROM orders GROUP BY order_no );
3.3 分頁(yè)查詢優(yōu)化
-- MySQL(LIMIT-OFFSET) SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 20; -- 第3頁(yè),每頁(yè)10條 -- PostgreSQL(窗口函數(shù)高效分頁(yè)) SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS row_num FROM products ) AS tmp WHERE row_num BETWEEN 21 AND 30;
4. 監(jiān)控與安全類
4.1 用戶權(quán)限檢查
-- MySQL 查看用戶權(quán)限 SHOW GRANTS FOR '用戶名'@'主機(jī)'; -- PostgreSQL 列出所有用戶角色 SELECT rolname, rolcreaterole, rolsuper FROM pg_roles;
4.2 表空間監(jiān)控
-- MySQL 查看表大小 SELECT TABLE_NAME AS 表名, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS 大小(MB) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '數(shù)據(jù)庫(kù)名' ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC; -- PostgreSQL 查看數(shù)據(jù)庫(kù)大小 SELECT pg_size_pretty(pg_database_size('數(shù)據(jù)庫(kù)名')) AS 大小;
5. 動(dòng)態(tài) SQL 與數(shù)據(jù)清洗
5.1 動(dòng)態(tài)生成條件查詢
-- 示例:根據(jù)參數(shù)動(dòng)態(tài)篩選(偽代碼邏輯) 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 數(shù)據(jù)清洗(拆分字段)
-- MySQL 拆分逗號(hào)分隔的字符串 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;
注意事項(xiàng)
- 數(shù)據(jù)庫(kù)差異:部分語(yǔ)法需根據(jù) MySQL、PostgreSQL 等調(diào)整(如分頁(yè)、字符串函數(shù))。
- 權(quán)限控制:部分操作需要管理員權(quán)限(如
pg_stat_activity
查詢)。 - 生產(chǎn)環(huán)境:慎用 DELETE/UPDATE,操作前先備份數(shù)據(jù)(如
CREATE TABLE backup AS SELECT * FROM table
)。
二、實(shí)用且高頻的 SQL 腳本工具
以下是一些實(shí)用且高頻的SQL腳本工具推薦,涵蓋性能優(yōu)化、審計(jì)、分析等場(chǎng)景,結(jié)合功能特點(diǎn)與適用場(chǎng)景進(jìn)行說(shuō)明:
1. MySQLTuner.pl
功能:MySQL性能診斷工具,分析參數(shù)配置、存儲(chǔ)引擎、日志文件等,提供優(yōu)化建議。
適用場(chǎng)景:快速定位MySQL內(nèi)存、連接數(shù)、緩存等配置問(wèn)題。
特點(diǎn):
支持MySQL/MariaDB/Percona Server,覆蓋約300項(xiàng)指標(biāo)。
報(bào)告標(biāo)記關(guān)鍵問(wèn)題(如[!!]
),并給出“Recommendations”優(yōu)化建議。
使用示例:
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中的慢查詢?nèi)罩痉治龉ぞ撸稍敿?xì)報(bào)告。
適用場(chǎng)景:分析MySQL慢查詢,識(shí)別高負(fù)載SQL語(yǔ)句。
特點(diǎn):
支持從日志、進(jìn)程列表或TCP抓包分析查詢。
提供執(zhí)行時(shí)間分布、TOP SQL排名等統(tǒng)計(jì)信息。
使用示例:
pt-query-digest /var/lib/mysql/slow.log > slow_report.log # 分析指定時(shí)間范圍 pt-query-digest --since '2025-04-28 00:00:00' --until '2025-04-29 00:00:00' slow.log
3. Yearning
功能:SQL審計(jì)平臺(tái),規(guī)范工單提交與執(zhí)行流程。
適用場(chǎng)景:團(tuán)隊(duì)協(xié)作中避免誤操作,記錄SQL執(zhí)行歷史。
特點(diǎn):
支持工單審核、權(quán)限控制、自動(dòng)生成回滾語(yǔ)句。
提供可視化界面,兼容99%的MySQL語(yǔ)法。
部署:
支持自定義審核流程,適合中小團(tuán)隊(duì)使用。
4. QweryBuilder
功能:多數(shù)據(jù)庫(kù)腳本管理工具,支持跨平臺(tái)操作。
適用場(chǎng)景:管理多種數(shù)據(jù)庫(kù)(如SQL Server、Oracle、MySQL)的腳本與架構(gòu)。
特點(diǎn):
提供差異對(duì)比、自動(dòng)格式化、數(shù)據(jù)庫(kù)搜索等功能。
集成WinMerge進(jìn)行對(duì)象差異分析,支持自定義代碼片段。
適用性:適合需統(tǒng)一管理異構(gòu)數(shù)據(jù)庫(kù)的環(huán)境。
5. Percona Toolkit(含pt-variable-advisor)
功能:MySQL參數(shù)分析與優(yōu)化建議。
適用場(chǎng)景:檢查變量配置合理性(如緩沖池大小、線程配置)。
特點(diǎn):
識(shí)別潛在問(wèn)題并標(biāo)記為WARN
,如不合理的超時(shí)設(shè)置。
使用示例:
pt-variable-advisor localhost --socket /var/lib/mysql/mysql.sock
6. tuning-primer.sh
功能:MySQL性能調(diào)優(yōu)腳本,提供針對(duì)性建議。
適用場(chǎng)景:快速獲取內(nèi)存、查詢緩存等優(yōu)化建議。
特點(diǎn):
輸出紅色警告提示關(guān)鍵問(wèn)題,如未優(yōu)化的查詢緩存配置。
使用示例:
wget https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh ./tuning-primer.sh
總結(jié)
- 性能優(yōu)化:優(yōu)先使用
MySQLTuner.pl
和pt-query-digest
快速定位問(wèn)題。 - 團(tuán)隊(duì)協(xié)作:采用
Yearning
規(guī)范SQL執(zhí)行流程,避免生產(chǎn)事故。 - 多數(shù)據(jù)庫(kù)管理:
QweryBuilder
適合異構(gòu)環(huán)境腳本統(tǒng)一管理。
到此這篇關(guān)于MySQL中實(shí)用且高頻的SQL工具與腳本分享的文章就介紹到這了,更多相關(guān)SQL實(shí)用腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Windows10下mysql5.5數(shù)據(jù)庫(kù)命令行中文亂碼問(wèn)題
重置系統(tǒng)后,很久之前安裝的MySQL數(shù)據(jù)庫(kù)出現(xiàn)了控制臺(tái)查詢中文亂碼問(wèn)題,時(shí)間太久早已經(jīng)不記得怎么設(shè)置了。下面通過(guò)本文給大家分享Windows10下解決MySQL5.5數(shù)據(jù)庫(kù)命令行中文亂碼問(wèn)題,一起看看吧2017-07-07mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例
這篇文章主要為大家介紹了mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05關(guān)于MySQL數(shù)據(jù)庫(kù)死鎖的案例和解決方案
MySQL Update語(yǔ)句防止死鎖是指在修改MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)時(shí),為避免多個(gè)進(jìn)程同時(shí)修改同一數(shù)據(jù)行而造成死鎖的情況,引入了一些機(jī)制來(lái)防止死鎖的產(chǎn)生,本文介紹了一個(gè) MySQL 數(shù)據(jù)庫(kù)死鎖的案例和解決方案,需要的朋友可以參考下2023-09-09MySQL數(shù)據(jù)庫(kù)中的TRUNCATE?TABLE命令詳解
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)中TRUNCATE?TABLE命令的相關(guān)資料,Truncate Table“清空表”的意思,它對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行清空操作,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05Windows10系統(tǒng)下MySQL(8.0.37)安裝與配置教程
相信很多人都遇到過(guò)安裝Mysql的時(shí)候出現(xiàn)各種各樣的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下MySQL(8.0.37)安裝與配置的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07MyEclipse連接Mysql數(shù)據(jù)庫(kù)的方法(一)
這篇文章主要介紹了MyEclipse連接Mysql數(shù)據(jù)庫(kù)的方法(一)的相關(guān)資料,非常實(shí)用,具有參考價(jià)值,需要的朋友可以參考下2016-05-05MySQL主從數(shù)據(jù)庫(kù)搭建的實(shí)現(xiàn)
本文主要介紹了MySQL8.0主從復(fù)制搭建步驟,包括配置文件修改、復(fù)制用戶權(quán)限設(shè)置、主庫(kù)狀態(tài)查詢、SSL證書生成及數(shù)據(jù)同步,具有一定的參考價(jià)值,感興趣的可以了解一下2025-06-06mysql數(shù)據(jù)庫(kù)查詢基礎(chǔ)命令詳解
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)查詢基礎(chǔ)命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11MySQL將時(shí)間戳轉(zhuǎn)換為年月日格式的實(shí)現(xiàn)
在我們的項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常需要將時(shí)間戳或日期時(shí)間字段轉(zhuǎn)換為特定的格式,本文主要介紹了MySQL將時(shí)間戳轉(zhuǎn)換為年月日格式的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08