MySQL慢查詢(xún)查找和調(diào)優(yōu)測(cè)試
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
這將使得慢查詢(xún)和沒(méi)有使用索引的查詢(xún)被記錄下來(lái)。
這樣做之后,對(duì)mysql-slow.log文件執(zhí)行tail -f命令,將能看到其中記錄的慢查詢(xún)和未使用索引的查詢(xún)。
隨便提取一個(gè)慢查詢(xún),執(zhí)行explain:
explain low_query
你將看到下面的結(jié)果:
+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | some_table | ALL | NULL | NULL | NULL | NULL | 166 | Using where |
+----+-------------+---------------------+------+---------------+------+---------+------+------+-------------+
注意上面的rows和key列。rows顯示該查詢(xún)影響了多少行記錄,我們不想讓這個(gè)值太大。key顯示用了哪個(gè)索引,為NULL時(shí)表示查詢(xún)未用任何索引。
如果想讓查詢(xún)更快,你或許需要為某些列增加索引:
CREATE INDEX myapp_mytable_myfield_idx on myapp_mytable(myfield);
除了配置mysql配置文件來(lái)實(shí)現(xiàn)記錄慢查詢(xún)外,還有下面的方法可以記錄慢查詢(xún):
SELECT t.TABLE_SCHEMA AS `db`,
t.TABLE_NAME AS `table`,
s.INDEX_NAME AS `index name`,
s.COLUMN_NAME AS `FIELD name`,
s.SEQ_IN_INDEX `seq IN index`,
s2.max_columns AS `# cols`,
s.CARDINALITY AS `card`,
t.TABLE_ROWS AS `est rows`,
ROUND(((s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) * 100), 2) AS `sel %`
FROM INFORMATION_SCHEMA.STATISTICS s
INNER JOIN INFORMATION_SCHEMA.TABLES t ON s.TABLE_SCHEMA = t.TABLE_SCHEMA AND s.TABLE_NAME = t.TABLE_NAME
INNER JOIN (
SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, MAX(SEQ_IN_INDEX) AS max_columns
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA != 'mysql' GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME ) AS s2 ON s.TABLE_SCHEMA = s2.TABLE_SCHEMA AND s.TABLE_NAME = s2.TABLE_NAME AND s.INDEX_NAME = s2.INDEX_NAME
WHERE t.TABLE_SCHEMA != 'mysql' /* Filter out the mysql system DB */
AND t.TABLE_ROWS > 10 /* Only tables with some rows */
AND s.CARDINALITY IS NOT NULL /* Need at least one non-NULL value in the field */
AND (s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) < 1.00 /* unique indexes are perfect anyway */
ORDER BY `sel %`, s.TABLE_SCHEMA, s.TABLE_NAME /* DESC for best non-unique indexes */
LIMIT 10;
- 深入mysql慢查詢(xún)?cè)O(shè)置的詳解
- 詳解MySql的慢查詢(xún)分析及開(kāi)啟慢查詢(xún)?nèi)罩?/a>
- MySQL慢查詢(xún)優(yōu)化之慢查詢(xún)?nèi)罩痉治龅膶?shí)例教程
- MySQL慢查詢(xún)?nèi)罩镜呐渲门c使用教程
- MySQL 開(kāi)啟慢查詢(xún)?nèi)罩镜姆椒?/a>
- 對(duì)MySQL慢查詢(xún)?nèi)罩具M(jìn)行分析的基本教程
- 一次MySQL慢查詢(xún)導(dǎo)致的故障
- MySQL開(kāi)啟慢查詢(xún)?nèi)罩竟δ艿姆椒?/a>
- mysqlsla慢查詢(xún)分析工具使用筆記
- MySQL慢查詢(xún)工具的使用小結(jié)
相關(guān)文章
MySQL拋出Incorrect string value異常分析
從上至下統(tǒng)一用上UTF-8就高枕無(wú)憂(yōu),今天還是遇到字符的異常,本文將介紹解決方法2012-11-11
Mysql數(shù)據(jù)庫(kù)表中為什么有索引卻沒(méi)有提高查詢(xún)速度
你有沒(méi)有想起過(guò)為什么明明再數(shù)據(jù)庫(kù)中有索引,但是查詢(xún)速度卻并沒(méi)有希望的那樣快?本篇文章將帶給你答案,跟小編一起看看吧2022-02-02
一次Mysql?update?sql不當(dāng)引起的生產(chǎn)故障記錄
這篇文章主要給大家介紹了關(guān)于一次Mysql?update?sql不當(dāng)引起的生產(chǎn)故障的相關(guān)資料,由于update涉及到數(shù)據(jù)的修改,所以很容易推斷,update語(yǔ)句比select語(yǔ)句會(huì)更復(fù)雜一些,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
如何添加一個(gè)mysql用戶(hù)并給予權(quán)限詳解
在很多時(shí)候我們并不會(huì)直接利用mysql的root用戶(hù)進(jìn)行項(xiàng)目的開(kāi)發(fā),一般我們都會(huì)創(chuàng)建一個(gè)具有部分權(quán)限的用戶(hù),下面這篇文章主要給大家介紹了關(guān)于如何添加一個(gè)mysql用戶(hù)并給予權(quán)限的相關(guān)資料,需要的朋友可以參考下2023-03-03
MySQL數(shù)據(jù)表設(shè)計(jì)之自動(dòng)增長(zhǎng)的實(shí)現(xiàn)
本文主要介紹了MySQL數(shù)據(jù)表設(shè)計(jì)之自動(dòng)增長(zhǎng)的實(shí)現(xiàn),包括創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置自動(dòng)增長(zhǎng)和修改數(shù)據(jù)表時(shí)添加自動(dòng)增長(zhǎng),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
MySQL實(shí)現(xiàn)字段分割一行轉(zhuǎn)多行的示例代碼
這篇文章主要介紹了MySQL實(shí)現(xiàn)字段分割一行轉(zhuǎn)多行的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
mysql 行列動(dòng)態(tài)轉(zhuǎn)換的實(shí)現(xiàn)(列聯(lián)表,交叉表)
下面小編就為大家?guī)?lái)一篇mysql 行列動(dòng)態(tài)轉(zhuǎn)換的實(shí)現(xiàn)(列聯(lián)表,交叉表)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
MySQL Sleep連接過(guò)多問(wèn)題解決方法
這篇文章主要介紹了MySQL Sleep連接過(guò)多問(wèn)題解決方法,MySQL Sleep連接過(guò)多一般多為客戶(hù)端沒(méi)關(guān)閉連接導(dǎo)致的,解決方法很簡(jiǎn)單,修改一下配置文件即可,需要的朋友可以參考下2015-05-05

