我有一个包含此结构的表,它目前包含大约160万条记录。如何优化包含LIKE'%abc%'查询的160多万条记录的MySQL表
CREATE TABLE `chatindex` (
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`roomname` varchar(90) COLLATE utf8_bin NOT NULL,
`username` varchar(60) COLLATE utf8_bin NOT NULL,
`filecount` int(10) unsigned NOT NULL,
`connection` int(2) unsigned NOT NULL,
`primaryip` int(10) unsigned NOT NULL,
`primaryport` int(2) unsigned NOT NULL,
`rank` int(1) NOT NULL,
`hashcode` varchar(12) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`timestamp`,`roomname`,`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
无论是ROOMNAME和用户名的列包含相同的确切数据,但独特性和每个项目的重要位来自时间戳与这两个项目相结合。
正在启动需要一段时间(10-20秒)查询是这样的:
SELECT timestamp,roomname,username,primaryip,primaryport
FROM `chatindex`
WHERE username LIKE '%partialusername%'
我究竟能做些什么来优化这个?我不能这样做partialusername%
,因为对于某些查询,我只会有一小部分实际用户名的中心,而不是实际值开头的前几个字符。
编辑:
此外,将狮身人面像为这个特殊的目的更好?
如果你需要“%part%”,那么你必须这样做。你会用什么查询的结果?你可以在非数据库方面改变你的方法吗? – 2012-07-06 06:38:02