3

パフォーマンスの低いクエリがあります。サーバーのバージョン: 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 行あります。

ご覧のとおり、説明には可能なキーがありますが、実際のキーを使用して表示されていません。

何か案は?これはうまくいくはずで、何かばかげたことをやっているようです。

4

1 に答える 1

1

twitter_id は VARCHAR であるため、MySQL が最適な実行計画を使用するのを妨げる可能性のある暗黙の型変換を避けるために、値を WHERE 句で引用符で囲む必要があります。

SELECT * 
FROM influencers
WHERE influencers.twitter_id = '86861293'
LIMIT 1
于 2011-03-24T18:36:56.197 に答える