未使用 mysql 5.1.37 查询索引

标签 mysql indexing explain

我有一个执行不佳的查询。服务器版本: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/

相关文章:

mysql - 二级关键词搜索的索引结构

mysql - 使用文件排序和临时优化查询

Mysql 左连接不使用外键

indexing - 我们怎么知道 monetDB 正在使用索引?

mysql - 如何让 Android 应用程序与外部 MySQL 数据库通信

javascript - Mysql:sequelize 查询返回空结果

php - 限制插入数据库、PHP/AJAX 的条目数

python - 你如何在 Python 中进行二维 (x,y) 索引?

python - 快速索引

mysql - WebSQL 和 MySQL 同步