概述
flush status;
show session status like 'select%';
select * from user_account limit 100;#語句沒有使用索引,影響Select_scan值
show session status like 'select%';
select * from user_account where uid=100;#user_account表uid為主鍵,不影響select相關值
show session status like 'select%';
select * from user_account ua left join user_coin_pay_log up on ua.uid=up.uid limit 10;#user_coin_pay_log表uid沒有索引,Select_full_join加1
show session status like 'select%';
select * from user_account where uid < 100;#范圍查詢,影響Select_range值
show session status like 'select%';
select * from user_account ua left join user_collection uc on ua.uid=uc.uid limit 10;#user_collection表uid有索引,不影響Select_full_join
show session status like 'select%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| Select_full_join | 1 | 沒有使用索引的聯表的數量
| Select_full_range_join | 0 | 在引用的表中使用范圍搜索的聯表的數量
| Select_range | 1 | 在第一個表中使用范圍的聯接的數量
| Select_range_check | 0 | 在每一行數據后對鍵值進行檢查的不帶鍵值的聯表的數量。如果不為0,你應仔細檢查表的索引
| Select_scan | 2 | 對第一個表進行完全掃描的聯表的數量
+------------------------+-------+
flush status;show session status like 'Handler%';select * from user_account limit 10;#沒用到索引,進行全索引掃描,影響Handler_read_first,Handler_read_rnd_nextshow session status like 'Handler%';select * from user_account where uid = 100;#uid為主鍵,影響Handler_read_keyshow session status like 'Handler%';select * from user_account where uid > 100 limit 10;#uid為主鍵,影響Handler_read_key,Handler_read_nextshow session status like 'Handler%';select * from user_account where uid < 200 order by uid desc limit 10 ;#uid為主鍵,並且使用desc,影響Handler_read_key,Handler_read_prevshow session status like 'Handler%';select * from user_account group by energy order by count(*) limit 100;#沒有使用索引,並且進行group by和order by,影響Handler_read_first,Handler_read_key,Handler_read_rnd,Handler_read_rnd_next,Handler_update,Handler_write,此條影響“Handler_update,Handler_write”原因是排序使用臨時表
show session status like 'Handler%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Handler_commit | 2 |
| Handler_delete | 0 |
| Handler_discover | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 2 | 索引中第一條被讀的次數,如果較高,服務器正執行大量全索引掃描
| Handler_read_key | 33831 | 根據鍵讀一行的請求數,如果較高,說明查詢和表的索引正確
| Handler_read_next | 0 | 按照鍵順序讀下一行的請求數
| Handler_read_prev | 0 | 按照鍵順序讀上一行的請求數,主要用於優化ORDER BY ... DESC
| Handler_read_rnd | 48 | 根據固定位置讀一行的請求數。如果你正執行大量查詢並需要對結果進行排序該值較高。你可能使用了大量需要MySQL掃描整個表的查詢或你的連接沒有正確使用鍵
| Handler_read_rnd_next | 33977 | 在數據文件中讀下一行的請求數。如果你正進行大量的表掃描,該值較高。通常說明你的表索引不正確或寫入的查詢沒有利用索引。
| Handler_rollback | 0 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 33779 |
| Handler_write | 48 |
+----------------------------+-------+
flush status;show session status like 'Sort%';select * from user_account group by energy order by count(*) limit 100;show session status like 'Sort%';+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Sort_merge_passes | 0 | 排序算法已經執行的合並的數量。如果這個變量值較大,應考慮增加sort_buffer_size系統變量的值
| Sort_range | 0 | 在范圍內執行的排序的數量
| Sort_rows | 0 | 已經排序的行數
| Sort_scan | 0 | 通過掃描表完成的排序的數量
+-------------------+-------+
flush status;show session status like 'Created%';
select * from user_account group by energy order by count(*) limit 100;
show session status like 'Created%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0 | 服務器執行語句時在硬盤上自動創建的臨時表的數量
| Created_tmp_files | 2 | mysqld已經創建的臨時文件的數量
| Created_tmp_tables | 3 | 服務器執行語句時自動創建的內存中的臨時表的數量。如果Created_tmp_disk_tables較大,你可能要增加tmp_table_size值使臨時 表基於內存而不基於硬盤
+-------------------------+-------+
最后
以上就是健忘汽车为你收集整理的mysql show 和explain_mysql查詢性能分析(show status,show profile,explain)的全部内容,希望文章能够帮你解决mysql show 和explain_mysql查詢性能分析(show status,show profile,explain)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复