问题:
从100万条记录中的到 成绩最高的记录
问题分析:
要从一张表中找到成绩最高的记录并不难,有很多种办法,最简单的就是利用TOP 1
但是这种方法有一点小问题,就是如果成绩最高的有两个人的话只能查出其中的一个。
对上面的方法进行改进:
或用子查询的方式:
但是这个题目成功与否不在于能否查询出成绩最高的记录,而在于用最快的速度查询出来。经过测试从100万条记录中找到成绩最高的记录如果使用第一个方法需要1秒多,
下面是测试的代码:
我这里创建的表是person,查询的是年龄最大的
以上插入的语句需要执行20分钟以上,请耐心等待
完成后用下面的测试看执行的效率
我的电脑执行的时候是在1100-1500之间
如果是用子查询的方式会更慢。大约在5000毫秒左右。
解决办法:
为person表的age这一列创建索引
公平起见执行一下清空缓存的语句:
创建之后同样运行上面的测试速度的语句,看到的毫秒数是266。
Oh Yeah!效率提高了无数倍。
使用子查询的方式再试试看:
我执行的时间是4186毫秒,效率略有提升。
但是这样查询出的结果是10192条记录。查询结果记录多的原因是结果集数量太大。