下面小編就為大家帶來一篇Mysql慢查詢操作梳理總結。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
Mysql慢查詢解釋
#MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中回應時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢日誌中。 long_query_time的預設值為10,意思是執行10S以上的語句。預設情況下,Mysql資料庫並沒有啟動慢查詢日誌,需要我們手動來設定這個參數,當然,如果不是調優需要的話,一般不建議啟動該參數,因為開啟慢查詢日誌會或多或少帶來一定的性能影響。 慢查詢日誌支援將日誌記錄寫入文件,也支援將日誌記錄寫入資料庫表;慢查詢日誌用於記錄一些過慢的查詢語句,可以幫助管理員分析問題所在,該日誌預設是沒有開啟的,需要在設定檔裡加入一系列參數來手動啟動
#開啟Mysql慢查詢的理由
#資料庫是很容易產生瓶頸的地方,現在Nosql大家討論這麼熱,大概都被資料庫搞鬱悶了。 MySQL中最影響速度的就是那些查詢非常慢的語句,這些慢的語句,可能是寫的不夠合理或是大數據下多表的聯合查詢等等,所以我們要找出這些語句,分析原因,加以最佳化。這也是發這篇文章的原因
開啟mysql慢查詢方法
1)方法一、登陸mysql資料庫終端機開啟
mysql> show variables like "%long%"; <SPAN style="COLOR: #ff00ff"> //查看一下默认为慢查询的时间10秒 </SPAN> +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.00 sec) mysql> set global long_query_time=1; <SPAN style="COLOR: #ff00ff">//设置成1秒,加上global,下次进mysql已然生效</SPAN> Query OK, 0 rows affected (0.00 sec) mysql> show variables like "%slow%"; <SPAN style="COLOR: #ff00ff"> //查看一下慢查询是不是已经开启 </SPAN> +---------------------+---------------------------------+ | Variable_name | Value | +---------------------+---------------------------------+ | log_slow_queries | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /usr/local/mysql/mysql-slow.log | +---------------------+---------------------------------+ 4 rows in set (0.00 sec) mysql> set slow_query_log='ON'; <SPAN style="COLOR: #ff00ff"> //加上global,不然会报错的</SPAN> ERROR 1229 (HY000): Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL mysql> set global slow_query_log='ON'; <SPAN style="COLOR: #ff00ff">//这个参数设置为ON,表示启用慢查询,可以捕获执行时间超过一定数值的SQL语句。</SPAN> Query OK, 0 rows affected (0.28 sec) mysql> show variables like "%slow%"; <SPAN style="COLOR: #ff00ff">//查看是否已经开启 </SPAN> +---------------------+---------------------------------+ | Variable_name | Value | +---------------------+---------------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /usr/local/mysql/mysql-slow.log | +---------------------+---------------------------------+ 4 rows in set (0.00 sec)
#方法2、修改mysql的設定檔my.cnf
#[root@www ~]# vim /etc/mysql.cnf
在[mysqld]區域配置裡加入下面內容
......
slow_query_log = 1 //开启慢查询日志,将1改为ON也可以 long_query_time = 1 //mysql慢查询时间,指定达到多少秒才算慢查询;这里推荐设置超过1秒的执行语句就会被记录到慢查询日志中 slow_query_log_file= /var/lib/mysql/mysql-slow.log //慢查询日志路径。这里slow_query_log_file修改为log-slow-queries 也可以 //主要是上面三行内容,还可以添加下面几行细节性配置 long-queries-not-using-indexes //记录没有使用索引的查询语句 min_examined_row_limit = 1000 //记录查找了多达1000次而引起的慢查询 log-slow-admin-statements //记录ALTER TABLE等语句引发的慢查询 log-slow-slave-statements //记录从服务器产生的慢查询
分析工具
#分析工具其實就是記錄mysql-slow.log裡面的數據,分析一下顯示出來(其實自己寫一個shell腳本也是可以把要的資訊取出來的)。
[root@www ~]# cat mysql-slow.log //檢視指令
/usr/local/mysql/libexec/mysqld, Version: 5.1.26-rc-log (Source distribution). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 100814 13:28:30 # User@Host: root[root] @ localhost [] # Query_time: 10.096500 Lock_time: 0.045791 Rows_sent: 1 Rows_examined: 2374192 SET timestamp=1281763710; select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15); # Time: 100814 13:37:02 # User@Host: root[root] @ localhost [] # Query_time: 10.394134 Lock_time: 0.000091 Rows_sent: 1 Rows_examined: 2374192 SET timestamp=1281764222; select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15); # Time: 100814 13:37:16 # User@Host: root[root] @ localhost [] # Query_time: 4.608920 Lock_time: 0.000078 Rows_sent: 1 Rows_examined: 1260544 SET timestamp=1281764236; select count(*) as cou from ad_visit_history where ad_code in (select ad_code from ad_list where id=41) order by id desc;
看到了,就是記錄sql語句的執行情況,包括執行時間,鎖定時間等,所以要不要分析工具看個人情況,分析工具很多,在這裡只說一下mysql自帶的慢查詢分析工具mysqldumpslow的使用方法。
[root@www ~]# mysqldumpslow -h
Option h requires an argument ERROR: bad option Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] Parse and summarize the MySQL slow query log. Options are --verbose verbose --debug debug --help write this text to standard output -v verbose -d debug //查错 -s ORDER what to sort by (t, at, l, al, r, ar etc), 'at' is default //排序方式query次数,时间,lock的时间和返回的记录数来排序 -r reverse the sort order (largest last instead of first) //倒排序 -t NUM just show the top n queries //显示前N多个 -a don't abstract all numbers to N and strings to 'S' -n NUM abstract numbers with at least n digits within names //抽象的数字,至 少有n位内的名称 -g PATTERN grep: only consider stmts that include this string //配置模式 -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard), //mysql所以机器名或者IP default is '*', i.e. match all -i NAME name of server instance (if using mysql.server startup script) -l don't subtract lock time from total time //总时间中不减去锁定时间
實例:
##
[root@BlackGhost bin]# ./mysqldumpslow -s r -t 20 /var/lib/mysql/mysql-slow.log [root@BlackGhost bin]# ./mysqldumpslow -s r -t 20 -g 'count' /var/lib/mysql/mysql-slow.log
以上是Mysql慢查詢操作的程式碼總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。