2009-11-12 156 views

回答

7

只选择你需要的字段通常会更快 - 特别是如果这些字段被索引“覆盖”,以便数据库只需要从索引而不是从主表中加载数据(从而允许它获取更少的页面)。

3

只选择你所需要的更快,这适用于列和where子句。

+0

我会谨慎对待有关WHERE子句的一般性陈述。可能会出现边界情况,使WHERE子句导致非常奇怪的访问路径,这可能比读取整个表更慢。我不认为这会发生在限制列。 – Thilo 2009-11-12 09:21:02

+0

一致。但总的来说,限制返回的数据是一种更好的方法。 – 2009-11-12 09:33:53

0

选择你需要的字段更快,因为它带来的数据更少。这是提高查询性能速度的一般建议。

-2

如果您多次访问表格,选择所有列的速度会更快,并且具有更多硬解析的开销比选择更多列的开销要大。

E.g.可以说你有一个表foobar列a..c,所有的CHAR(1);然后陈述

SELECT a,b,c FROM foobar; 
SELECT a,b FROM foobar; 
SELECT a,c FROM foobar; 
SELECT a FROM foobar; 
SELECT b,c FROM foobar; 
SELECT b FROM foobar; 
SELECT c FROM foobar; 

下列顺序可能会比执行

SELECT * FROM foobar; 

七次慢。

+0

是的,但七个不同的版本也将被缓存,一旦你第二次“选择c从foobar”它也将是一个软解析。 – Thilo 2009-11-12 09:46:40

+0

Thilo:当然。一般来说,我会在优化任何事情之前测量性能。 – 2009-11-12 11:13:36

+0

这是一个糟糕的,人为的例子。切勿使用SELECT *。 – gbn 2009-11-12 12:53:20

1

在将来添加列时,SELECT *会特别危险。假设你有一个需要UserID和LastLogon日期的例程。最后你在桌面上添加一个UserNotes文本列和Bang!这个小程序现在也会拉动一些文本数据,整个应用程序的性能将会下降,并且整个应用程序中的每个Select语句都需要修复才能解决问题!

只需选择应用程序需要的列:)