我有一个具有这种结构的表,它目前包含大约 160 万条记录。
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 和 username 列都可以包含相同的确切数据,但每个项目的唯一性和重要位来自于将时间戳与这两个项目相结合。
开始需要一段时间(10-20 秒)的查询是这样的:
SELECT timestamp,roomname,username,primaryip,primaryport
FROM `chatindex`
WHERE username LIKE '%partialusername%'
我究竟能做些什么来优化这个?我不能这样做partialusername%
,因为对于某些查询,我将只有一小部分实际用户名的中心,而不是实际值开头的前几个字符。
编辑:
另外,狮身人面像对于这个特定目的会更好吗?