表结构(1000万行记录):
1
2
3
4
5
6
7
8
9
10
11
|
mysql> show
create
table
sbtest\G;
*************************** 1. row ***************************
Table
: sbtest
Create
Table
:
CREATE
TABLE
`sbtest` (
`id`
int
(10) unsigned
NOT
NULL
AUTO_INCREMENT,
`k`
int
(10) unsigned
NOT
NULL
DEFAULT
'0'
,
`c`
char
(120)
NOT
NULL
DEFAULT
''
,
`pad`
char
(60)
NOT
NULL
DEFAULT
''
,
PRIMARY
KEY
(`id`),
KEY
`k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001
DEFAULT
CHARSET=utf8
|
我现在对sbtest表非索引字段进行order by排序,版本是MySQL5.5,耗时时间如下:
结果是3分钟14.78秒。
下面再到MySQL5.6里,同样执行这条SQL,看看耗时时间:
结果是12.53秒。
这个是为啥呢?在MySQL5.5里对非索引字段排序时,会对表的所有记录进行一次排序操作,然后取出LIMIT 10条记录,余下的记录抛弃。而在MySQL5.6里,只针对LIMIT 10条记录进行排序,余下的记录并不会进行排序,这样就加快了速度,提高了性能。
参考手册:
本文转自hcymysql51CTO博客,原文链接: http://blog.51cto.com/hcymysql/1358543,如需转载请自行联系原作者