背景:今天dba群里很安静,老大问了个问题如题.
表结构,200万数据
CREATE TABLE `tblReply` (
`rid` int(10) unsigned NOT NULL,
`qid` int(10) unsigned NOT NULL,
PRIMARY KEY (`rid`),
KEY `qid` (`qid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
方案1
select count(rid) from tblReply; 耗时:0.47
方案2
select count(qid) from tblReply; 耗时0.41
方案3
select count( *) from tblReply force index(qid); 耗时0.34
方案4
select count(qid) from tblReply force index(qid); 耗时0.41
测试结论:
为什么方案2耗时少?
1.顺序 io.
2.数据大小 少.
3.不用排序.
为什么方案3耗时更少?
因为count(*)不会真正的去读取数据,但是count(qid/rid)会真正的去读取数据,所以耗时多.