This is probably quite simple, but cant seem to figure it out
mysql> explain select * from user where realname=‘hope’ or nickname=‘hope’ limit 2;±—±------------±------±-----±------------------±-----±--------±-----±------±------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |±—±------------±------±-----±------------------±-----±--------±-----±------±------------+| 1 | SIMPLE | user | ALL | realname,nickname | NULL | NULL | NULL | 15838 | Using where |±—±------------±------±-----±------------------±-----±--------±-----±------±------------+1 row in set (0.00 sec)
I can’t get it to actually use an index for this query.
CREATE TABLE user
( user_id
int(11) NOT NULL auto_increment, password
char(32) default NULL, realname
varchar(128) default NULL, email
varchar(128) default NULL, nickname
varchar(128) default NULL, PRIMARY KEY (user_id
), KEY realname
(realname
), KEY nickname
(nickname
)) ENGINE=MyISAM DEFAULT CHARSET=latin1
I’ve also tried both:
ALTER TABLE user
ADD INDEX ( realname
,nickname
) ;ALTER TABLE user
ADD INDEX ( nickname
,realname
) ;
I’ve also tried this on mySQL 5.0.27 which nicely uses a union or sort_union index. So the question is what method should use for mySQL 4?
Maybe a FULLTEXT? but that sounds rather over the top!
Thanks