簡體   English   中英

MySQL拒絕使用索引進行簡單查詢

[英]MySQL Refusing to Use Index for Simple Query

我有一個要對其運行非常簡單查詢的表。 我在基數高的列上的表中添加了索引,因此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秒才能找到合適的行。

上面的答案使我意識到兩件事。

1)當使用VARCHAR索引時,查詢條件需要加引號,否則MySQL將拒絕使用該索引(隱式在幕后進行轉換?)

SELECT * FROM foo WHERE column = '123'; # do this
SELECT * FROM foo where column = 123; # don't do this

2)如果可能的話,最好使用/索引INT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM