欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中實(shí)用且高頻的SQL工具與腳本分享

 更新時(shí)間:2025年06月27日 10:54:08   作者:岫珩  
這篇文章主要介紹了一些實(shí)用且高頻的?SQL?工具腳本代碼示例,涵蓋數(shù)據(jù)庫(kù)維護(hù)、性能優(yōu)化、數(shù)據(jù)操作等場(chǎng)景,適用于?MySQL、PostgreSQL?等主流數(shù)據(jù)庫(kù),希望對(duì)大家有所幫助

一、實(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.plpt-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)題

    解決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-07
  • mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例

    mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例

    這篇文章主要為大家介紹了mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • mysql 登錄時(shí)閃退的問(wèn)題解決方法

    mysql 登錄時(shí)閃退的問(wèn)題解決方法

    這篇文章主要介紹了mysql 登錄時(shí)閃退的問(wèn)題解決方法的相關(guān)資料,mysql 出現(xiàn)閃退問(wèn)題,很是棘手在做項(xiàng)目的時(shí)候,這里對(duì)解決這樣的問(wèn)題提供了解決方案,需要的朋友可以參考下
    2016-11-11
  • 關(guān)于MySQL數(shù)據(jù)庫(kù)死鎖的案例和解決方案

    關(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-09
  • MySQL數(shù)據(jù)庫(kù)中的TRUNCATE?TABLE命令詳解

    MySQL數(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-05
  • Windows10系統(tǒng)下MySQL(8.0.37)安裝與配置教程

    Windows10系統(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-07
  • MyEclipse連接Mysql數(shù)據(jù)庫(kù)的方法(一)

    MyEclipse連接Mysql數(shù)據(jù)庫(kù)的方法(一)

    這篇文章主要介紹了MyEclipse連接Mysql數(shù)據(jù)庫(kù)的方法(一)的相關(guān)資料,非常實(shí)用,具有參考價(jià)值,需要的朋友可以參考下
    2016-05-05
  • MySQL主從數(shù)據(jù)庫(kù)搭建的實(shí)現(xiàn)

    MySQL主從數(shù)據(jù)庫(kù)搭建的實(shí)現(xiàn)

    本文主要介紹了MySQL8.0主從復(fù)制搭建步驟,包括配置文件修改、復(fù)制用戶權(quán)限設(shè)置、主庫(kù)狀態(tài)查詢、SSL證書生成及數(shù)據(jù)同步,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-06-06
  • mysql數(shù)據(jù)庫(kù)查詢基礎(chǔ)命令詳解

    mysql數(shù)據(jù)庫(kù)查詢基礎(chǔ)命令詳解

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)查詢基礎(chǔ)命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • MySQL將時(shí)間戳轉(zhuǎn)換為年月日格式的實(shí)現(xiàn)

    MySQL將時(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

最新評(píng)論