程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL機能剖析及explain的應用解釋

MySQL機能剖析及explain的應用解釋

編輯:MySQL綜合教程

MySQL機能剖析及explain的應用解釋。本站提示廣大學習愛好者:(MySQL機能剖析及explain的應用解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL機能剖析及explain的應用解釋正文


1.應用explain語句去檢查剖析成果
如explain select * from test1 where id=1;會湧現:id selecttype table type possible_keys key key_len ref rows extra各列。
個中,
type=const表現經由過程索引一次就找到了;
key=primary的話,表現應用了主鍵;
type=all,表現為全表掃描;
key=null表現沒用到索引。type=ref,由於這時候以為是多個婚配行,在結合查詢中,普通為REF。
2.MYSQL中的組合索引
假定表有id,key1,key2,key3,把三者構成一個組合索引,則
如:

where key1=....
where key1=1 and key2=2
where key1=3 and key3=3 and key2=2

依據最左准繩,這些都是可使用索引的,如from test where key1=1 order by key3,用explain剖析的話,只用到了normal_key索引,但只對where子句起感化,爾後面的order by須要排序。
3.應用慢查詢剖析
在my.ini中:
long_query_time=1
log-slow-queries=d:\mysql5\logs\mysqlslow.log
把跨越1秒的記載在慢查詢日記中
可以用mysqlsla來剖析之。也能夠在mysqlreport中,有如
DMS分離剖析了select ,update,insert,delete,replace等所占的百份比
4.MYISAM和INNODB的鎖定
myisam中,留意是表鎖來的,好比在多個UPDATE操作後,再SELECT時,會發明SELECT操作被鎖定了,必需等一切UPDATE操作終了後,再能SELECT
innodb的話則分歧了,用的是行鎖,不存在下面成績。
5.MYSQL的事務設置裝備擺設項
innodb_flush_log_at_trx_commit=1
表現事務提交時立刻把事務日記寫入磁盤,同時數據和索引也更新。
innodb_flush_log_at_trx_commit=0
事務提交時,不立刻把事務日記寫入磁盤,每隔1秒寫一次
innodb_flush_log_at_trx_commit=2
事務提交時,立刻寫入磁盤文件(這裡只是寫入到內核緩沖區,但不立刻刷新到磁盤,而是每隔1秒刷新到盤,同時更新數據和索引
explain用法
EXPLAIN tbl_name或:EXPLAIN [EXTENDED] SELECT select_options
前者可以得出一個表的字段構造等等,後者重要是給出相干的一些索引信息,而明天要講述的重點是後者。
舉例

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

各個屬性的寄義
id
select查詢的序列號
select_type
select查詢的類型,重要是差別通俗查詢和結合查詢、子查詢之類的龐雜查詢。
table
輸入的行所援用的表。
type
結合查詢所應用的類型。
type顯示的是拜訪類型,是較為主要的一個目標,成果值從好到壞順次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
普通來講,得包管查詢至多到達range級別,最好能到達ref。
possible_keys
指出MySQL能應用哪一個索引在該表中找到行。假如是空的,沒有相干的索引。這時候要進步機能,可經由過程磨練WHERE子句,看能否援用某些字段,或許檢討字段不是合適索引。
key
顯示MySQL現實決議應用的鍵。假如沒有索引被選擇,鍵是NULL。
key_len
顯示MySQL決議應用的鍵長度。假如鍵是NULL,長度就是NULL。文檔提醒特殊留意這個值可以得出一個多重主鍵裡mysql現實應用了哪一部門。
ref
顯示哪一個字段或常數與key一路被應用。
rows
這個數表現mysql要遍歷若干數據能力找到,在innodb上是禁絕確的。
Extra
假如是Only index,這意味著信息只用索引樹中的信息檢索出的,這比掃描全部表要快。
假如是where used,就是應用上了where限制。
假如是impossible where 表現用不著where,普通就是沒查出來啥。
假如此信息顯示Using filesort或許Using temporary的話會很費勁,WHERE和ORDER BY的索引常常沒法統籌,假如依照WHERE來肯定索引,那末在ORDER BY時,就必定會惹起Using filesort,這就要看是先過濾再排序劃算,照樣先排序再過濾劃算。
關於MySQL機能剖析及explain用法的常識就引見到這裡了,願望本次的引見可以或許對您有所收成!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved