mysql聯合索引的應用 有一個log表,結構是這樣的:
CREATE TABLE `weblog` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ip` varchar(45) NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `kind` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=48024 DEFAULT CHARSET=utf8;
記錄共有11萬條 1、
select count(times1) as times from (SELECT count(id) as times1 FROM weblog group by ip,kind) as a
當執行這個查詢時,需耗時1.9秒,有些受不了,後來發現這樣這樣添加個一個聯合索引
alter table weblog add INDEX `sindex` (`ip`,`kind`)後,,該查詢就會減少到0.182秒 優化是非常明顯的 但是如果
alter table weblog add INDEX `sindex` (`ip`,`kind`,'id')後,查詢反倒會變慢 2、
select count(times1) as times from (SELECT count(id) as times1 FROM weblog group by kind) as a
當未進行聯合查詢優化時,需要時間我1.8025秒
alter table weblog add INDEX `sindex` (`kind`,`id`)進行聯合索引後
這個時間變為0.143秒 優化也是非常明顯 如果有類似的group by的 如果進行聯合索引,合適的話,應該能提高很高的效能