mysql數據庫優化課程---15、mysql優化步驟(mysql中最常用最立竿見影的優化是什么)
一、總結
一句話總結:索引優化最立竿見影
索引優化:不然有多少行要掃描多少次,1億行大概是5到10分鍾,和列的存量有關系
2、show status的作用是什么?
執行頻率:mysql>show global status; global表示自數據庫啟動至今
了解各種sql的執行頻率
通過show status命令了解各種SQL的執行頻率。
格式:mysql> show [session|global]status;
其中:session(默認)表示當前連接,
global表示自數據庫啟動至今
mysql>show status;
mysql>show global status;
mysql>show status like ‘Com_%’;
mysql>show global status like ‘Com_%’;
• 參數說明:
• Com_XXX表示每個XXX語句執行的次數如:
– Com_select 執行select操作的次數,一次查詢只累計加1
– Com_update 執行update操作的次數
– Com_insert 執行insert操作的次數,對批量插入只算一次。
– Com_delete 執行delete操作的次數
• 只針對於InnoDB存儲引擎的。
– InnoDB_rows_read 執行select操作的次數
– InnoDB_rows_updated 執行update操作的次數
– InnoDB_rows_inserted 執行insert操作的次數
– InnoDB_rows_deleted 執行delete操作的次數
• 其他:
– connections 連接mysql的數量
– Uptime 服務器已經工作的秒數
– Slow_queries:慢查詢的次數
3、定位執行效率的SQL語句?
explain select:explain select * from table where id=1000;
desc select:desc select * from table where id=1000;
1)explain select * from table where id=1000;
2)desc select * from table where id=1000;
1.explain或desc定位一條sql語句的影響行數.
mysql>desc select * from user where username='user8'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: user
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 11
filtered: 10.00
Extra: Using where
4、檢查服務器增、刪、改和查的使用頻次:(本次啟動以來)?
show status:查的次數:show status like "%Com_select%";
show status like "%Com_update%";
show status like "%Com_insert%";
show status like "%Com_select%";
show status like "%Com_delete%";
5、查innodb自啟動以來的影響行數?
show status:show status like "%InnoDB_rows%";
mysql> show status like "%InnoDB_rows%";
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Innodb_rows_deleted | 2 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_read | 105 |
| Innodb_rows_updated | 3 |
+----------------------+-------+
6、如何知道一個程序中的哪些sql語句的執行效率很慢?
慢查詢日志
explain desc:explain或desc定位一條sql語句的影響行數.
1.explain或desc定位一條sql語句的影響行數.
mysql>desc select * from user where username='user8'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: user
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 11
filtered: 10.00
Extra: Using where
2.查看mysql的慢查詢日志.
1)查看慢查詢日志是否開啟
show variables like "%quer%";
slow_query_log | ON
slow_query_log_file | mysql-slow.log
long_query_time | 10.000000
2)查看慢查詢的次數
show status like "%quer%";
Slow_queries | 0
二、內容在總結中
推薦mysql書籍:
網易專家DBA: 《深入淺出Mysql》
1.SQL語句優化
1)優化SQL語句的一般步驟
2)索引優化
3)check與optimize使用方法
4)常用SQL的優化
檢查服務器增、刪、改和查的使用頻次:(本次啟動以來)
show status like "%Com_update%";
show status like "%Com_insert%";
show status like "%Com_select%";
show status like "%Com_delete%";
查innodb自啟動以來的影響行數:
mysql> show status like "%InnoDB_rows%";
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Innodb_rows_deleted | 2 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_read | 105 |
| Innodb_rows_updated | 3 |
+----------------------+-------+
定位執行效率較低的SQL語句:
1.explain或desc定位一條sql語句的影響行數.
mysql>desc select * from user where username='user8'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: user
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 11
filtered: 10.00
Extra: Using where
2.查看mysql的慢查詢日志.
1)查看慢查詢日志是否開啟
show variables like "%quer%";
slow_query_log | ON
slow_query_log_file | mysql-slow.log
long_query_time | 10.000000
2)查看慢查詢的次數
show status like "%quer%";
Slow_queries | 0
3.修改慢查詢的時間(my.ini)
long_query_time=6
4.重啟mysql服務器
net stop mysql57
net start mysql57
優化表空間:
optimize table sales;
1.myisam表沒有問題.
2.innodb表ibdata1文件無法回收空間.