我有以下MySQL查詢索引的查詢,但仍在尋找每一行
select points_for_user from items where user_id = '38415';
上查詢說明返回此
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE items index NULL points_for_user_index 2 NULL 1000511 Using index
的問題是,不應該行的數量遠由於索引而少於表中的行數?
user_id是主索引,所以我試着在points_for_user上創建一個索引,然後再查看每一行。 user_id AND points_for_user上的索引仍然搜索每一行。
我錯過了什麼?
謝謝!
CREATE TABLE IF NOT EXISTS `items` (
`capture_id` int(11) NOT NULL AUTO_INCREMENT,
`id` int(11) NOT NULL,
`creator_user_id` bigint(20) NOT NULL DEFAULT '0',
`user_id` int(11) NOT NULL,
`accuracy` int(11) NOT NULL,
`captured_at` timestamp NOT NULL DEFAULT '2011-01-01 06:00:00',
`ip` varchar(30) NOT NULL,
`capture_type_id` smallint(6) NOT NULL DEFAULT '0',
`points` smallint(6) NOT NULL DEFAULT '5',
`points_for_user` smallint(6) NOT NULL DEFAULT '3',
PRIMARY KEY (`capture_id`),
KEY `capture_user` (`capture_id`,`id`,`user_id`),
KEY `user_id` (`user_id`,`id`),
KEY `id` (`id`),
KEY `capture_creator_index` (`capture_id`,`creator_user_id`),
KEY `points_capture_index` (`points_for_user`,`creator_user_id`),
KEY `points_for_user_index` (`points_for_user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1008992 ;
select count(*) from items where user_id = '38415'
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE captures ref user_munzee_id user_munzee_id 4 const 81 Using index
這是一個複合索引嗎?你爲什麼用引號指定數字? – zerkms
是的,points_for_user和user_id上的索引是一個複合索引。我不確定你用引號的意思。如果我使用「38415」而不僅僅是38415,那麼這很重要嗎? – Scott
好吧,如果ID是一個數字列,它將被編入索引,而您正在指定要搜索的字符串。 – Adrian