我有一个简单而快速的问题。我在mysql中有一个拥有数百万用户的用户表。此表中的用户名列具有" unique"索引创建。
现在我想从这个表中搜索一个特定的用户,我这样写:
SELECT user_id FROM tbl_user WHERE username LIKE 'someuser%'
但这并没有给出准确的结果,我不得不将%放在两边以使其正常工作,如下所示:
SELECT user_id FROM tbl_user WHERE username LIKE '%someuser%'
这使搜索速度非常慢,因为它没有使用索引。 有什么建议如何让它超级快?我应该应用全文索引吗?是否可以在同一列上同时应用unique和fulltext?
以下是表格结构
CREATE TABLE IF NOT EXISTS
tbl_user(
的user_idint(11) NOT NULL auto_increment,
的用户名varchar(50) collate utf8_unicode_ci NOT NULL,
密码varchar(40) collate utf8_unicode_ci NOT NULL,
活性tinyint(4) NOT NULL default '1',
姓名varchar(20) collate utf8_unicode_ci default NULL,
姓氏varchar(20) collate utf8_unicode_ci default NULL,
电子邮件varchar(50) collate utf8_unicode_ci default NULL, PRIMARY KEY (
{USER_ID {1}}的用户名), UNIQUE KEY
的用户名(
我认为FullText索引可以正常工作。但是,如果我使用OR在同一查询中的另一列上执行FullText(下面的示例),则它不使用索引。仅当where子句中只有一个全文搜索条件时,它才使用索引。
)
) ENGINE=InnoDB;
有什么想法吗?