MySQL SELECT效率

时间:2010-08-02 03:57:56

标签: mysql select performance

我正在使用PHP与MySQL数据库交互,我想知道用“SELECT * FROM ...”查询MySQL是否比“SELECT id FROM ...”效率更高或更低。

4 个答案:

答案 0 :(得分:4)

效率低下。

如果你考虑一下,SQL会发送你选择的每一行的所有数据。

假设您有一个名为MassiveTextBlock的列 - 当您SELECT *时将包含此列,因此当您实际上不需要时,SQL必须发送所有这些数据。相比之下,SELECT id只是抓取一组数字。

答案 1 :(得分:0)

它的效率较低,因为您获取的信息不仅仅是SELECT id。此外,第二个问题更有可能只使用索引来提供。

答案 2 :(得分:0)

这取决于您选择数据的原因。如果您正在编写像phpMySQL这样的原始数据库接口,那么它可能有意义。

如果您使用相同的条件和连接操作在同一个表上执行多个查询,那么SELECT col1, col2 FROM table可能比使用两个独立SELECT col1 FROM tableSELECT col2 FROM table更有意义。获取相同数据的不同部分,因为它在同一查询中执行两个操作。

但是,通常,您应该只从表中选择所需的列,以便最大限度地减少DBMS疏散不必要的数据。如果您的数据库与客户端服务器位于不同的服务器上,或者您的数据库服务器已经过时和/或速度很慢,那么这种好处会大大增加。

没有条件SELECT *是不可避免的,但如果有,那么您的数据模型可能存在一些严重的设计缺陷。

答案 3 :(得分:0)

这取决于您的索引。

如果只选择MySQL用于获取结果的索引中存在的列,则选择较少的列有时可以节省大量时间。

例如,如果您在列id上有索引,并执行此查询:

SELECT id FROM mytable WHERE id>5

然后MySQL只需要读取索引,甚至不需要读取表行。另一方面,如果选择其他列,则为:

SELECT id, name FROM mytable WHERE id>5

然后MySQL需要从索引中读取id,然后转到表行来读取名称列。

但是,如果您正在阅读不在您正在选择的索引中的列,那么读取更多列实际上不会产生差异,尽管它会产生一些小的差异。如果某些列包含大量数据,例如大型TEXT或BLOB列,那么在不需要它们的情况下排除它们是明智的。