我有一个表有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'