为什么我的慢查询日志中会出现许多类似于这个查询(其中“jack”是不同的名称)的内容?
Users表有许多字段(超过我选择的这三个字段),约有40,000行。
select name,username,id from Users where ( name REGEXP
'[[:<:]]jack[[:>:]]' ) or ( username REGEXP '[[:<:]]jack[[:>:]]' )
order by name limit 0,5;
id
是主键和自增的。
name
有一个索引。
username
有一个唯一索引。
有时需要3秒钟才能完成!如果我在MySQL中解释这个select语句,会得到以下结果:
select type: SIMPLE
table: Users
type: index
possible keys: NULL
key: name
key len: 452
ref: NULL
rows: 5
extra: Using where
这是我能做到的最好吗?有什么需要改进的地方吗?
(name like '%jack%' and name REGEXP '[[:<:]]jack[[:>:]]' ) or ( username like '%jack%' and username REGEXP '[[:<:]]jack[[:>:]]' )
。如果需要更好的性能,可以使用FULLTEXT索引或一些第三方工具。 - Imre L