带OR条件的MySql查询

时间:2014-03-11 08:40:44

标签: mysql performance database-performance

我有一个表有2个名为“username”和“emailid”的唯一索引字段。当我在这个表上使用OR条件(例如

)触发一个查询时
SELECT * FROM tableName where (username = 'aaaa' OR emailid = 'aaaa')

解释声明显示我上面的查询是

"Using union(UX_EMailID,UX_UserName); Using where" 

在“SIMPLE”下作为select_type。

表现是否合适,或出现问题。还有一种方法可以和我一起做。首先用一个字段调用,如果没有找到记录,则尝试第二个字段,如下所示。

IF EXISTS (SELECT 1 FROM tableName where username = 'aaaa' ) THEN
   //do code
ELSE
    IF EXISTS (SELECT 1 FROM tableName where emailid = 'aaaa' ) THEN
       //do code
    ELSE
       //throw error 
    END IF; 
END IF; 

所以,现在我有困惑,这是更好的表现方式。

编辑:

table: usermst
~~~~~~~~~~~~~~
id        int         //primary key 
username  varchar(20) //unique index
emailid   varchar(50) //unique index

EXPLAIN:

id: 1, 
select_type: 'SIMPLE'
table: 'usermst'
type: 'index_merge' 
possible_keys: 'ux_username,ux_emailid'
key: 'ux_emailid,ux_username' 
key_len: '153,63' 
ref: null
rows: 2
Extra: 'Using union(ux_emailid,ux_username); Using where'

0 个答案:

没有答案