有誰知道MySQL的解釋輸出
之間的區別使用索引
和
使用其中;使用索引
mysql的解釋輸出(在額外)?
繁殖:
CREATE TABLE `tmp_t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) NOT NULL DEFAULT '0',
`b` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k1` (`a`),
KEY `k2` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=5;
insert into tmp_t1 (a,b) values (1,'b1'), (1, 'b2'), (2, 'b3');
的MySQL>解釋SELECT COUNT(1)從tmp_t1其中a = 1 \ G變
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tmp_t1
type: ref
possible_keys: k2,kz
key: kz
key_len: 4
ref: const
rows: 3
Extra: Using index
1 row in set (0.11 sec)
的MySQL>從tmp_t1其中b(1)解釋選擇計數='b1'\ G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tmp_t1
type: ref
possible_keys: k3
key: k3
key_len: 52
ref: const
rows: 2
Extra: Using where; Using index
1 row in set (0.00 sec)
有沒有人知道爲什麼在第一種情況下re只是在額外的領域使用索引,而在第二個是「使用where;使用索引」? 這兩種情況之間的區別在於第一種情況在整數上運行WHERE,第二種情況在varchar(50)字段上執行。 但它爲什麼重要?
感謝您的幫助!
'使用where'說,有一個過濾器(='WHERE'條款),在SQL。 '使用索引'表示查詢使用索引。兩者都是不同的東西。我不明白這個問題。 – Kaii
問題是mysql爲什麼只使用索引來執行第一個查詢,而爲了執行查詢第二個「使用where」被報告。我問,因爲我無法理解這兩個查詢之間的區別 - 一個使用在條件的整數,而另一個爲varchar字段的事實如何影響MySQL的方式執行這些(爲什麼第二個查詢不使用「index only」?) –
在第一個EXPLAIN中提到並實際使用的'kz'索引是什麼? – newtover