为了序言,我知道(应该如此!)在生产中使用SELECT *
是不好的,但我维护着其他人编写的脚本。而且,我也意识到这个问题在具体情况上很低......但是假设的情况。假设的性能良率不使用SELECT *
比方说,我有一个脚本,从20个字段的表中选择一切。让我们说典型的客户信息。
然后让我们说,作为一名优秀的开发人员,我将SELECT *
缩短为实际使用的13个特定字段中的SELECT
。
通过明确列出字段与SELECT *
相比,我可以期待什么类型的性能优势(如果有的话)?
我会这么说,这两个查询都利用了相同的确切索引。如果您想知道,更具体的查询无法访问其他查询无法使用的覆盖索引。
我不期待奇迹,就像添加一个针对更具体查询的索引一样。我是在想。
您是否尝试先运行Non-Key或Key查询,以确保它们与'*'相比没有缓存好处?令人惊讶的是差异如此之大。 – 2010-10-05 22:28:23
考虑到非关键列在第2次运行中比关键列回来要快得多(假设这不是错字),我认为缓存与速度的某些差异有关。 – 2010-10-05 23:00:24
@Jonathan:我以不同的顺序多次运行它们,以避免因缓存而导致误导结果。我连续两次跑每一个,看看我是否会第二次得到不同的结果等。除了缓存另一个明显的问题是什么碰巧同时触及数据库。我当然不会声称我在这里的结果是明确的 - 只是有趣的。 – Jay 2010-10-06 14:06:58