搜尋
首頁資料庫mysql教程MySQL中資料庫最佳化的常見sql語句(總結分享)

推薦學習:mysql影片教學

#1.SHOW ENGINES

##查看執行引擎以及預設引擎。

2.SHOW PROCESSLIST

SHOW PROCESSLIST查看當前資料庫連接的使用情況,以及各種狀態信息,非常有用。 SHOW PROCESSLIST; 只列出前100條,如果想全列出請使用SHOW FULL PROCESSLIST;

##屬性列以及意義:

#iduserhostdbcommandstate欄位以及意義,mysql列出的狀態:
一個標識,要kill 一個語句的時候很有用。
顯示目前用戶,如果不是root,這個指令就只顯示你權限範圍內的sql語句。
顯示這個語句是從哪個ip 的哪個連接埠上發出的。可用於追蹤出問題語句的使用者。
顯示這個程序目前連接的是哪個資料庫。
顯示目前連線的執行的指令,一般就是休眠(sleep),查詢(query),連線(connect)。

Checking tableClosing tablesConnect OutCopying to tmp table on diskCreating tmp tabledeleting from main table

3.SHOW STATUS LIKE 'InnoDB_row_lock%'

#InnoDB 的行級鎖定狀態變數。

InnoDB 的行級鎖定狀態變數不僅記錄了鎖定等待次數,還記錄了鎖定總時長,每次平均時長,以及最大時長,此外還有一個非累積狀態量顯示了目前正在等待鎖定的等待數量。各個狀態量的說明如下:

  • InnoDB_row_lock_current_waits:目前正在等待鎖定的數量;
  • InnoDB_row_lock_time:從系統啟動到現在鎖定總時間長度;
  • InnoDB_row_lock_time_avg:每次等待所花平均時間;
  • InnoDB_row_lock_time_max:從系統啟動到現在等待最常的一次所花的時間;
  • InnoDB_row_lock_waits:系統啟動後到現在總共等待的次數;

對於這5個狀態變量,比較重要的主要是InnoDB_row_lock_time_avg(等待平均時長),InnoDB_row_lock_waits(等待總次數)以及InnoDB_row_lock_time(等待總時長)這三項。尤其是當等待次數很高,而且每次等待時長也不小的時候,我們就需要分析系統中為什麼會有如此多的等待,然後根據分析結果著手指定優化計劃。

如果發現鎖定爭用比較嚴重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比較高,還可以透過設定InnoDB Monitors 來進一步觀察發生鎖定衝突的資料表、資料行等,並分析鎖定爭用的原因。

4.SHOW ENGINE INNODB STATUS

SHOW ENGINE INNODB STATUS指令會輸出目前InnoDB監視器監視到的很多訊息,它輸出就是一個單獨的字串,沒有行和列,內容分成很多小段,每一段對應innodb儲存引擎不同部分的信息,其中有一些資訊對於innodb開發者來說非常有用。

有一節LATEST DETECTED DEADLOCK,就是記錄的最後一次死鎖信息, 如下案例:

  • “(1) TRANSACTION”顯示第一個交易的資訊;
  • 「(1) WAITING FOR THIS LOCK TO BE GRANTED」顯示第一個交易等待的鎖定資訊
  • 「(2) TRANSACTION」顯示第二個事務的資訊;
  • “(2) HOLDS THE LOCK(S)” 顯示的是第二個事務所持有的鎖資訊;
  • “(2) WAITING FOR THIS LOCK TO BE GRANTED」顯示第二個交易等待的鎖定資訊
  • 最後一行表示處理結果,例如「WE ROLL BACK TRANSACTION (2),表示回滾了第二個交易。

#5.SHOW INDEXS

SHOW INDEXS查詢一個表中的索引資訊:SHOW INDEXES FROM table_name;

建表的sql如下:

CREATE TABLE contacts(
    contact_id INT AUTO_INCREMENT,
    first_name VARCHAR(100) NOT NULL comment 'first name',
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(100),
    phone VARCHAR(20),
    PRIMARY KEY(contact_id),
    UNIQUE(email),
    INDEX phone(phone) ,
    INDEX names(first_name, last_name) comment 'By first name and/or last name'
);

預存程序插入五萬筆資料:

CREATE PROCEDURE zqtest ( ) BEGIN
	DECLARE
		i INT DEFAULT 0;
	DECLARE
		j VARCHAR ( 100 ) DEFAULT 'first_name';
	DECLARE
		k VARCHAR ( 100 ) DEFAULT 'last_name';
	DECLARE
		l VARCHAR ( 100 ) DEFAULT 'email';
	DECLARE
		m VARCHAR ( 20 ) DEFAULT '11111111111';
	
	SET i = 0;
	START TRANSACTION;
	WHILE
			i < 50000 DO
		IF
			MOD ( i, 100 ) = 0 THEN
				
				SET j = CONCAT( &#39;first_name&#39;, i );
			
		END IF;
		IF
			MOD ( i, 200 ) = 0 THEN
				
				SET k = CONCAT( &#39;last_name&#39;, i );
			
		END IF;
		IF
			MOD ( i, 50 ) = 0 THEN
				
				SET m = CONCAT( &#39;&#39;, CAST( m as UNSIGNED) + i );
			
		END IF;
		INSERT INTO contacts ( first_name, last_name, email, phone )
		VALUES
			( j, k, CONCAT(l,i), m );
		
		SET i = i + 1;
		
	END WHILE;
	COMMIT;
	
END;

使用show index from contacts;後結果如下:

#欄位說明:

正在檢查資料表(這是自動的)。
正在將表中修改的資料刷新到磁碟中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁碟空間是否已經滿了或者磁碟是否正處於重負中。
複製從伺服器正在連接主伺服器。
由於臨時結果集大於tmp_table_size(預設16M),正在將臨時表從記憶體儲存轉為磁碟儲存以此節省內存。
正在建立暫存表以存放部分查詢結果。
伺服器正在執行多表刪除中的第一部分,剛刪除第一個表。
##Index_type索引結構類型,常見有FULLTEXT,HASH,BTREE,RTREEComment、Index_comment註解

6.ALTER TABLE xx ENGINE = INNODB

重建表,包括索引結構。可以消除索引頁分割以及刪除資料時留下的磁碟碎片。

7.ANALYZE TABLE

不是重建表,只是對錶的索引資訊做重新統計,沒有修改數據,這個過程中加了MDL讀鎖。可以用來修正show index from tablename;中統計索引的Cardinality是資料異常的情況。

推薦學習:mysql影片教學

#
Table 表名
Non_unique 唯一索引為0,其他索引為1。主鍵索引也是唯一索引。
Key_name 索引名。如果名字相同則表示是同一個索引,並且是聯合索引,每一行都表示聯合索引中的某一個欄位。
Seq_in_index 索引中的列序號,從1開始。也可以表示該列在聯合索引中的順序。
Column_name 索引列名,如果是聯合索引則是某一列的名字
#Collat​​ion 列以什麼方式儲存在索引中,大概意思就是字元序。
Cardinality 一個索引上不同的值的個數,我們稱之為「基數」(cardinality),也稱為區分度,這個基數越大,索引的區分度越好。該值的統計不一定是準確的,可以使用ANALYZE TABLE修正。
Sub_part 前綴索引。如果列只是部分地編入索引,則為被編入索引的字元的數目。如果整列的值都被編入索引,則為NULL。
Packed 關鍵字如何被壓縮。如果沒有被壓縮,則為NULL。壓縮一般包括壓縮傳輸協定、壓縮列解決方案和壓縮表解決方案。
Null 如果列值可以包含null,則為YES

以上是MySQL中資料庫最佳化的常見sql語句(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:脚本之家。如有侵權,請聯絡admin@php.cn刪除
MySQL的位置:數據庫和編程MySQL的位置:數據庫和編程Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

MySQL:從小型企業到大型企業MySQL:從小型企業到大型企業Apr 13, 2025 am 12:17 AM

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

幻影是什麼讀取的,InnoDB如何阻止它們(下一個鍵鎖定)?幻影是什麼讀取的,InnoDB如何阻止它們(下一個鍵鎖定)?Apr 13, 2025 am 12:16 AM

InnoDB通過Next-KeyLocking機制有效防止幻讀。 1)Next-KeyLocking結合行鎖和間隙鎖,鎖定記錄及其間隙,防止新記錄插入。 2)在實際應用中,通過優化查詢和調整隔離級別,可以減少鎖競爭,提高並發性能。

mysql:不是編程語言,而是...mysql:不是編程語言,而是...Apr 13, 2025 am 12:03 AM

MySQL不是一門編程語言,但其查詢語言SQL具備編程語言的特性:1.SQL支持條件判斷、循環和變量操作;2.通過存儲過程、觸發器和函數,用戶可以在數據庫中執行複雜邏輯操作。

MySQL:世界上最受歡迎的數據庫的簡介MySQL:世界上最受歡迎的數據庫的簡介Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的重要性:數據存儲和管理MySQL的重要性:數據存儲和管理Apr 12, 2025 am 12:18 AM

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

為什麼要使用mysql?利益和優勢為什麼要使用mysql?利益和優勢Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。Apr 12, 2025 am 12:16 AM

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。