我有一個包含此結構的表,它目前包含大約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