亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中數據庫優化的常見sql語句有哪些

發布時間:2022-08-24 09:53:35 來源:億速云 閱讀:156 作者:iii 欄目:MySQL數據庫

這篇文章主要介紹“MySQL中數據庫優化的常見sql語句有哪些”,在日常操作中,相信很多人在MySQL中數據庫優化的常見sql語句有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL中數據庫優化的常見sql語句有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.SHOW ENGINES

查看執行引擎以及默認引擎。

MySQL中數據庫優化的常見sql語句有哪些

2.SHOW PROCESSLIST

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

MySQL中數據庫優化的常見sql語句有哪些

屬性列以及含義:

id一個標識,要kill 一個語句的時候很有用。
user顯示當前用戶,如果不是root,這個命令就只顯示你權限范圍內的sql語句。
host顯示這個語句是從哪個ip 的哪個端口上發出的。可用來追蹤出問題語句的用戶。
db顯示這個進程目前連接的是哪個數據庫。
command顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect)。

state列以及含義,mysql列出的狀態:

Checking table正在檢查數據表(這是自動的)。
Closing tables正在將表中修改的數據刷新到磁盤中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁盤空間是否已經滿了或者磁盤是否正處于重負中。
Connect Out復制從服務器正在連接主服務器。
Copying to tmp table on disk由于臨時結果集大于tmp_table_size(默認16M),正在將臨時表從內存存儲轉為磁盤存儲以此節省內存。
Creating tmp table正在創建臨時表以存放部分查詢結果。
deleting from main table服務器正在執行多表刪除中的第一部分,剛刪除第一個表。

3.SHOW STATUS LIKE 'InnoDB_row_lock%'

InnoDB 的行級鎖定狀態變量。

MySQL中數據庫優化的常見sql語句有哪些

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,就是記錄的最后一次死鎖信息, 如下案例:

MySQL中數據庫優化的常見sql語句有哪些

  • “(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( 'first_name', i );
			
		END IF;
		IF
			MOD ( i, 200 ) = 0 THEN
				
				SET k = CONCAT( 'last_name', i );
			
		END IF;
		IF
			MOD ( i, 50 ) = 0 THEN
				
				SET m = CONCAT( '', 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;后結果如下:

MySQL中數據庫優化的常見sql語句有哪些

字段說明:

Table表名
Non_unique唯一索引為0,其他索引為1。主鍵索引也是唯一索引。
Key_name索引名。如果名字相同則表明是同一個索引,并且是聯合索引,每一行都表示聯合索引中的某一個列。
Seq_in_index索引中的列序列號,從1開始。也可以表明該列在聯合索引中的順序。
Column_name索引列名,如果是聯合索引則是某一個列的名字
Collation列以什么方式存儲在索引中,大概意思就是字符序。
Cardinality一個索引上不同的值的個數,我們稱之為“基數”(cardinality),也稱為區分度,這個基數越大,索引的區分度越好。該值的統計不一定是準確的,可以使用ANALYZE TABLE修正。
Sub_part前綴索引。如果列只是被部分地編入索引,則為被編入索引的字符的數目。如果整列的值都被編入索引,則為NULL。
Packed關鍵字如何被壓縮。如果沒有被壓縮,則為NULL。壓縮一般包括壓縮傳輸協議、壓縮列解決方案和壓縮表解決方案。
Null如果列值可以包含null,則為YES
Index_type索引結構類型,常見有FULLTEXT,HASH,BTREE,RTREE
Comment、Index_comment注釋

6.ALTER TABLE xx ENGINE = INNODB

重建表,包括索引結構。可以消除索引頁分裂以及刪除數據時留下的磁盤碎片。

7.ANALYZE TABLE

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

到此,關于“MySQL中數據庫優化的常見sql語句有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

荃湾区| 阆中市| 湛江市| 东至县| 岗巴县| 宜州市| 黄梅县| 芜湖市| 鄂温| 平和县| 左权县| 若尔盖县| 辽阳市| 体育| 商河县| 基隆市| 青阳县| 亚东县| 阿拉尔市| 衡阳市| 那坡县| 武鸣县| 靖州| 青龙| 汽车| 临夏县| 福贡县| 隆子县| 普兰县| 息烽县| 屯昌县| 扶风县| 桂平市| 武宁县| 嘉义市| 巴中市| 克东县| 山阳县| 响水县| 米泉市| 获嘉县|