检索所有列和多列的性能

Alg*_*bra 3 sql

我正在学习SQL"10分钟内的SQL",

引用使用通配符来检索所有记录,它声明:

通常,除非确实需要表中的每一列,否则最好不要使用*通配符.即使使用通配符可以节省显式列出所需列所需的时间和精力,但检索不必要的列通常会降低检索和应用程序的性能.

但是,检索所有记录所花费的时间少于检索多个字段所需的时间:

在此输入图像描述

结果表明,通配符为0.02秒VS 0.1秒

我测试过几次,通配符比多个指定的列不断更快,即使每次消耗的时间都不同.

Gor*_*off 5

感谢您尝试验证您在书中获得的建议!单个测试既不会使建议失效也不会使测试无效.值得进一步深入研究.

提供的建议SQL In 10 Minutes是合理的建议 - 它明确指出与绩效相关的目的.(另一个考虑因素是,当数据库发生变化时,它会使代码不稳定.)作为注释:我经常使用select t.*ad-hoc查询.

为什么结果不同?这可能有多种原因:

  • 数据库没有确定性的性能,因此其他注意事项(例如在计算机上运行的其他进程或资源争用)可能会影响性能.
  • 正如评论中所提到的,缓存可能就是原因.具体来说,运行第一个查询可能需要从磁盘加载数据,并且它已经在第一个查询的内存中.
  • 另一种形式的缓存是针对执行计划的,因此可能第一个执行计划是缓存而不是第二个.
  • 你没有提到数据库,但也许你的数据库有一个非常非常慢的编译器,并且编译第一个需要比第二个更长的时间.

从根本上说,这个建议从常识的角度来看是合理的.减少数据移动应该更有效率.这就是建议所说的.

在任何情况下,10毫秒和2毫秒之间的差异非常短.我不会将这种性能推广到更大的数据,并说第二次比一般数据快5倍.无论出于何种原因,它在非常小的数据集上缩短了8毫秒,其中一个非常小,无论如何都不会考虑性能.