我有一个执行不佳的查询。服务器版本:5.1.37-1ubuntu5.1(Ubuntu)
SELECT * FROM `influencers` WHERE (`influencers`.`twitter_id` = 86861293) LIMIT 1
show create table influencers
influencers CREATE TABLE `influencers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`twitter_id` varchar(255) DEFAULT NULL,
`display_name` varchar(255) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`screen_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_influencers_on_twitter_id` (`twitter_id`),
KEY `influencers_screen_name` (`screen_name`)
) ENGINE=InnoDB AUTO_INCREMENT=504126 DEFAULT CHARSET=latin1
explain SELECT * FROM `influencers` WHERE (`influencers`.`twitter_id` = 86861293) LIMIT 1
id select_type table type possible_keys key key_len ref rows Extra
-- ----------- ----------- ---- ------------------------------- ------ ------- ------ ------ -----------
1 SIMPLE influencers ALL index_influencers_on_twitter_id (null) (null) (null) 553716 Using where
该表中有 547545 行。
如您所见,解释有可能的 key ,但没有使用实际 key 显示它。
有什么想法吗?看起来这应该可行,我正在做一些愚蠢的事情。
最佳答案
由于 twitter_id 是 VARCHAR,您应该在 WHERE 子句中将值放在引号中以避免任何可能阻止 MySQL 使用最佳执行计划的隐式类型转换:
SELECT *
FROM influencers
WHERE influencers.twitter_id = '86861293'
LIMIT 1
关于未使用 mysql 5.1.37 查询索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423627/