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

