【发布时间】:2017-06-30 09:35:54
【问题描述】:
查询时我有一张表,
EXPLAIN SELECT `id`
FROM `tblsender`
WHERE `userid` = '6'
AND `astatus` = '1'
AND `sender` = 'ABCDEF'
即使在以所有可能的方式建立索引之后,我也会收到USING WHERE。这是我的最终表结构代码。
CREATE TABLE IF NOT EXISTS `tblsender` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`sender` varchar(6) NOT NULL,
`astatus` tinyint(1) NOT NULL DEFAULT '0',
`userid` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `astatus` (`astatus`),
KEY `userid` (`userid`),
KEY `sender` (`sender`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=22975 ;
我什至尝试了 sender 列的全文但仍然没有运气,我还尝试对所有 where clause 列进行索引。
ALTER TABLE `tblsender` ADD INDEX ( `sender` , `astatus` , `userid` ) ;
仍然收到using where,我怎样才能正确索引此表。
编辑:解释上述结构的输出。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE tblsender ref astatus,userid,sender astatus 1 const 1 Using where
并一起解释所有 3 列的输出
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE tblsender ref astatus,userid,sender,sender_2 astatus 1 const 1 Using where
【问题讨论】:
-
当所有三列都包含在单个索引中时,请显示来自
EXPLAIN的输出。 -
@Michael-sqlbot,很抱歉回复晚了,因为我遇到了一些互联网连接问题。我已经更新了我的问题。
-
您将 userid 和 astatus 作为字符串传递;省略撇号。
-
@BernhardDöbler 有帮助吗?
标签: mysql