我有這樣的MySQL表:MySQL不使用SELECT ... ORDER BY查詢中的主鍵。爲什麼?
CREATE TABLE `maillog` (
`Id` varchar(200) NOT NULL DEFAULT 'Test',
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ROW_FORMAT=DYNAMIC;
現在,我想執行這個查詢 - 但它是非常緩慢的許多行:
SELECT Id FROM `maillog` ORDER BY `Id`;
爲什麼MySQL的不使用主鍵?
如果我運行EXPLAIN
此查詢,結果顯示Key
一個NULL
值:
mysql> EXPLAIN SELECT Id FROM `maillog` ORDER BY `Id`;
+----+-------------+---------+------------+--------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+--------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | maillog | NULL | system | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
+----+-------------+---------+------------+--------+---------------+------+---------+------+------+----------+-------+
但DESCRIBE
查詢此表,顯示了Key
PRI
爲Id
列:
mysql> DESCRIBE `maillog`;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| Id | varchar(200) | NO | PRI | Test | |
| email | varchar(255) | YES | MUL | NULL | |
+-------+--------------+------+-----+---------+-------+
MySQL的應該是使用此查詢的主鍵。 –
@ GordonLinoff:我同意你的看法 - 但它不適用於不同的MySQL版本。 – Tahtu
編輯問題並插入'explain'。 MySQL使用主鍵作爲聚集索引,因此在解釋使用密鑰時可能並不明顯。許多用戶的「長時間」可能僅僅是由於正在處理的數據量所致。 –