show status lik..."/>
溫馨提示×

溫馨提示×

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

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

16性能優(yōu)化

發(fā)布時間:2020-08-12 15:04:38 來源:ITPUB博客 閱讀:102 作者:wg0411 欄目:建站服務(wù)器


16性能優(yōu)化

===============

索引

合理使用索引可以提高數(shù)據(jù)訪問速度
索引是否被合理使用可以使用show status或者mysqladmin擴展命來查看

mysql> show status like 'handler_read%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Handler_read_first    | 0     |
| Handler_read_key      | 0     |
| Handler_read_next     | 0     |
| Handler_read_prev     | 0     |
| Handler_read_rnd      | 0     |
| Handler_read_rnd_next | 456   |
+-----------------------+-------+
6 rows in set (0.00 sec)

其中:
 Handler_read_key這個值表示了一個行被索引讀的次數(shù),值高表示索引使用率較高
 Handler_read_rnd_next這個值表示按照順序讀下一行的申請次數(shù),值高表示查詢效率偏低,需要創(chuàng)建合力的索引

表中索引被創(chuàng)建后,分析表可以減少碎片,提高訪問效率
mysql> analyze table a,b;
+-------+---------+----------+----------+
| Table | Op      | Msg_type | Msg_text |
+-------+---------+----------+----------+
| an.a  | analyze | status   | OK       |
| an.b  | analyze | status   | OK       |
+-------+---------+----------+----------+
2 rows in set (0.03 sec)

--------------

查詢高速緩存

mysql> show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     |
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 9437184 |
| query_cache_type             | ON      |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+
6 rows in set (0.00 sec)

have_query_cache  是否設(shè)置了查詢高速緩存
query_cache_size  表示分配的查詢高速緩存的大小,為0則表示關(guān)閉了查詢告訴緩存
query_cache_type  值范圍為0到2,0或者off表示查詢告訴緩存關(guān)閉,1表示查詢告訴緩存已經(jīng)打開,但使用sql_no_cache選項的select語句除外,2或者demand根據(jù)需要按照運行帶sql_cache選項的select語句提供查詢告訴緩存

查詢中使用或者不是用查詢告訴緩存可以在查詢中是用關(guān)鍵字sql_cache,sql_no_cache來控制

mysql> select sql_cache * from a;
+----+------+
| id | name |
+----+------+
|  1 | ab   |
|  2 | abc  |
|  3 | abcd |
|  4 | ann  |
+----+------+
4 rows in set (0.00 sec)

mysql> select sql_no_cache * from a;
+----+------+
| id | name |
+----+------+
|  1 | ab   |
|  2 | abc  |
|  3 | abcd |
|  4 | ann  |
+----+------+
4 rows in set (0.00 sec)

----------------

分析查詢

類似于oracle的查看執(zhí)行計劃

mysql> explain select * from a;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | a     | ALL  | NULL          | NULL | NULL    | NULL |    4 |       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)


mysql> explain select * from a where id=1 union select * from a;
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type  | table      | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-------+
|  1 | PRIMARY      | a          | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
|  2 | UNION        | a          | ALL   | NULL          | NULL    | NULL    | NULL  |    4 |       |
|NULL | UNION RESULT | <union1,2> | ALL   | NULL          | NULL    | NULL    | NULL  | NULL |       |
+----+--------------+------------+-------+---------------+---------+---------+-------+------+-------+
3 rows in set (0.02 sec)

各個列的含義:
id   查詢中色了傳統(tǒng)的位置
table  查詢的表名
select_type 查詢類型,包括是否有子查詢,union,外部查詢,外部查詢中的子查詢等
type  連接的執(zhí)行情況,const:連接的最佳種類,all:掃描所有數(shù)據(jù)后才得到結(jié)果
possible_keys  提高查詢速度可以使用的索引
key   實際使用的鍵,包括在key_len列中顯示的鍵長度
rows  查詢到數(shù)據(jù)的長度
extra  其他信息,如mysql如何處理查詢結(jié)果等信息

---------------

優(yōu)化多表查詢

mysql中連接效果比子查詢好
避免使用嵌套
使用中間變量減少查詢層次

----------------

使用臨時表

使用臨時表存放中間信息可以提高性能

-----------------

優(yōu)化表設(shè)計

合理的字段選擇,字段長度選擇
optimize table

------------------

調(diào)整服務(wù)器設(shè)置

mysql優(yōu)化調(diào)整首先想到的是調(diào)整key_buffer_size和table_cache

key_buffer_size  mysql索引緩沖可以使用的內(nèi)存量,一般建議使用武力內(nèi)存的25%到30%
table_cache    表高速緩存使用的內(nèi)存量,與其有關(guān)的參數(shù)還有max_connections
         mysql建議table_cache=max_connections*n,n為標準連接中表的數(shù)量

mysql> select @@table_cache;
+---------------+
| @@table_cache |
+---------------+
|           700 |
+---------------+
1 row in set (0.00 sec)

mysql> show variables like '%table_cache%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| table_cache   | 700   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set global table_cache=1000;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@table_cache;
+---------------+
| @@table_cache |
+---------------+
|          1000 |
+---------------+
1 row in set (0.00 sec)

這樣設(shè)置重啟數(shù)據(jù)庫后設(shè)置將會恢復(fù)


其他的優(yōu)化方法:
 增加sort_buffer可以提高order by和group by語句的查詢速度
 增加read_rnd_buffer_size變量可以提高分類行的速度
 增加read_buffer_size可以提高讀緩存進而提高select效率
 增加binlog_cache_size增加二進制日志緩存區(qū),可以提高日志的處理速度
 增加bulk_insert_buffer_size可以提高批量插入速度,但只能在myisam表中生效
 增加thread_cache_size可以控制每個進程分配的內(nèi)存量,如果連接很多的話可以做到更好的控制

--------------

基準技術(shù)
 mysql benchmark suite
 要求能夠運行perl,包括perl dbi套件和mysql數(shù)據(jù)庫驅(qū)動程序(dbd)
 perl -e "use DBI"
  

向AI問一下細節(jié)

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

AI