|
icer_repls 发表于 2012-5-14 22:21 ![]()
嗯,我懂你的意思,但是这样做的意义是什么呢?单纯的追求执行计划里面用了主键索引?在我看来用了主键索 ...
我做这个的意义在于:你看看那这个2sql的 explain的row的值的大小,一个只要20 而另一个要92531多个,虽然都得到了最后20条但是要扫描行数是不一样的啊。
1你说一个表的数据是按照顺序来的,其实不然,它每次当数据存储不够的时候,每次分配1-4个区,每个区有64个页是连续的,所以对于大点的表来说,区和区之间的数据不连续的。
2:“在我看来用了主键索引不一定比没用效率要高。因为还要额外判断status的缘故。”,难道没有用主键索引的话,你就不要判断status,而且你也说过,主键索引也就是数据。你可以看2个sql的
explain的extra的值。而且mysql自身有优化系统的,要是对于第2个sql,它要是觉得不用主键索引比用主键索引要高的话,那它会自己进行优化的,我这里又没有加force index这个条件
3:现在的问题是在于“都要遍历到一定的程度,直到找到20行符合条件的行然后停止”,遍历到一定的程度,这个程度是怎么来判断,难道不是用explain的row值来进行判断?你可以看看第2个测试结
果就是 没有order by要扫描92531行。limit不用索引会是全表扫描的啊,现在用了主键索引,就只要扫描20行就可以了。 |
|