【发布时间】:2012-07-19 10:38:38
【问题描述】:
我有一个具有这种结构的表,它目前包含大约 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%,因为对于某些查询,我只会得到实际用户名中心的一小部分,而不是实际值开头的前几个字符。
编辑:
另外,狮身人面像会更适合这个特定目的吗?
【问题讨论】:
-
如果你需要 "%part%" 那么你必须这样做。您将使用查询结果做什么?你能改变你在非数据库方面的方法吗?
标签: mysql sql optimization