row in set ( sec)
注意keyrows和Extra这三项这条语句返回的结果说明了该sql会使用PRIMARY主键索引来查询结果集数量为条Extra没有显示证明没有用到排序或其他操作由此结果可以推断mysql会从索引中查询imgid=这条记录然后再到真实表中取出所有字段是很简单的操作key是指明当前sql会使用的索引mysql执行一条简单语句时只能使用到一条索引注意这个限制rows是返回的结果集大小结果集就是使用该索引进行一次搜索的所有匹配结果Extra一般会显示查询和排序的方式如果没有使用到key或者rows很大而用到了filesort排序一般都会影响到效率例如
mysql> desc select * from imgs where userid=mini order by clicks desc limit ;
row in set ( sec)
这条sql结果集会有条用到了filesort所以执行起来会非常消耗效率的这时mysql执行时会把整个表扫描一遍一条一条去找到匹配userid=mini的记录然后还要对这些记录的clicks进行一次排序效率可想而知真实执行时如果发现还比较快的话那是因为服务器内存还足够将条比较短小的记录全部读入内存所以还比较快但是并发多起来或者表大起来的话效率问题就严重了这时我把userid加入索引create index userid on imgs (userid);然后再检查
mysql> desc select * from imgs where userid=mini order by clicks desc limit ;
row in set ( sec)
[] [] [] [] [] []