この構造のテーブルがあり、現在約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列の両方に同じ正確なデータを含めることができますが、各項目の一意性と重要なビットは、タイムスタンプとこれら2つの項目の組み合わせに由来します。
しばらく(10〜20秒)かかり始めているクエリは次のとおりです。
SELECT timestamp,roomname,username,primaryip,primaryport
FROM `chatindex`
WHERE username LIKE '%partialusername%'
これを最適化するために正確に何ができますか?partialusername%
一部のクエリでは、実際のユーザー名の中央のほんの少ししかなく、実際の値の先頭から最初の数文字がないため、実行できません。
編集:
また、この特定の目的にはスフィンクスの方が適していますか?