我有,由於某種原因沒有使用任何索引一個相當簡單的查詢:的Mysql不使用任何索引
CREATE TABLE `events_self` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date` int(10) unsigned NOT NULL,
`username` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`event` enum('status_update','follow_hashtag','make_hashtag','avatar','placeholder_3') CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`obj_id` varchar(140) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`inline` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`,`date`),
KEY `obj_id` (`obj_id`),
KEY `user_date` (`username`,`date`),
KEY `event` (`event`),
KEY `x` (`event`,`inline`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `events_self` (`id`, `date`, `username`, `event`, `obj_id`, `inline`) VALUES (1, 1358359266, 'aaa', 'make_hashtag', '1', 'scene');
SELECT inline FROM events_self WHERE obj_id = 1;
EXPLAIN SELECT inline FROM events_self WHERE obj_id = 1;
+----+-------------+-------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | events_self | ALL | obj_id | NULL | NULL | NULL | 1610702 | Using where |
+----+-------------+-------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)
Server版本:5.3.2-MariaDB的-β-mariadb102〜萊尼日誌(MariaDB的 - http://mariadb.com/)
我應該離開表/查詢原樣,還是最好強制使用索引?
這裏的問題是?我在您的內容中看不到任何問號 –
這可能是因爲對於您的查詢,MySQL認爲不使用索引是最好的處理方式。試着強制它使用你認爲應該的索引並比較結果。 – fge
由於您的表中有一個單一條目,因此,mysql估計執行表掃描時索引會掃描您的查詢所需的資源會更少。不要忘記查詢執行計劃正在考慮表中的行數。 – ioan