0
我有一個表,我正在運行一個非常簡單的查詢。我在高基數列上添加了一個索引,所以MySQL應該能夠幾乎立即縮小結果,但是它每次都會進行全表掃描。爲什麼MySQL不使用我的索引?MySQL拒絕使用簡單查詢索引
mysql> select count(*) FROM eventHistory;
+----------+
| count(*) |
+----------+
| 247514 |
+----------+
1 row in set (0.15 sec)
CREATE TABLE `eventHistory` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`whatID` varchar(255) DEFAULT NULL,
`whatType` varchar(255) DEFAULT NULL,
`whoID` varchar(255) DEFAULT NULL,
`createTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `whoID` (`whoID`,`whatID`)
) ENGINE=InnoDB;
mysql> explain SELECT * FROM eventHistory where whoID = 12551\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: eventHistory
type: ALL
possible_keys: whoID
key: NULL
key_len: NULL
ref: NULL
rows: 254481
Extra: Using where
1 row in set (0.00 sec)
我已經嘗試向查詢添加FORCE INDEX以及它似乎仍然在做全表掃描。查詢的性能也很差。目前需要大約0.65秒才能找到合適的行。
varchar在它們的索引上具有最低基數 –
嘗試'解釋SELECT * FROM eventHistory where whoID ='12551''。 [演示](http://sqlfiddle.com/#!2/4898d/5)。 –
這兩條建議都非常有幫助。我將表格的本地副本轉換爲對列使用整數,現在查詢即時。圍繞查詢條件添加引號也會得到相同的結果。非常感謝! – tmountain