从MySQL获取数据的更有效方法

时间:2015-01-25 13:07:07

标签: php mysql sql mysqli

假设我有一个名为“User”的MySQL表

  

ID,姓名,电子邮件,年龄,性别,国家,家乡,城市,地址,Relationship_Status,Employment_Status,IP,Registered_Time

现在,哪个查询更有效地获取用户的所有信息?

A)

  

SELECT * FROM User WHERE id = 1

B)

  

SELECT ID FROM User WHERE id = 1

     

SELECT Name FROM User WHERE id = 1

     

从用户WHERE id = 1

中选择电子邮件      

SELECT Age FROM User WHERE id = 1

     

SELECT Gender FROM User WHERE id = 1

     

SELECT Country FROM User WHERE id = 1

     

SELECT Hometown FROM User WHERE id = 1

     

SELECT City FROM User WHERE id = 1

     

SELECT FROM FROM FROM WHERE id = 1

     

SELECT Relationship_Status FROM User WHERE id = 1

     

SELECT Employment_Status FROM User WHERE id = 1

     

SELECT IP FROM User WHERE id = 1

     

SELECT Registered_Time FROM User WHERE id = 1

事情是,视情况而定,我可能需要也可能不需要所有数据。那么,我应该在需要时逐个获取每个数据,还是应该立即获取所有数据然后根据需要使用?

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

获取多列的单个查询几乎总是比多个查询更有效。为什么?查询必须通过php序列化,发送到mySQL服务器,反序列化。然后mySQL服务器必须执行WHERE操作以查找适当的行。最后,它必须序列化结果并将它们发送回php。你做这一切的次数越少,系统的工作就越少。

专业提示:请勿使用SELECT *。而是枚举所需的列,如下所示。

SELECT ID, Name, Email, Employment_Status, Registered_Time FROM Users WHERE ID = 1

这种方法有很多优点,特别是在返回许多行的查询中(不属于你的行)。

答案 1 :(得分:0)

每次查询数据库都需要付出一些代价。 PHP必须将查询发送到SQL服务器,查询分析器必须解析您的查询,优化它,将其转换为一些内部代码,查找表,在磁盘上的索引文件中查找,在磁盘上的数据文件中查找

使用SELECT *一次选择所有列的成本几乎与在一个SQL查询中单独选择单个列的成本相同。

当从磁盘上的文件中读取数据时,它不会只读取您需要的10个字节,操作系统总是以更大的块读取磁盘中的数据(如4KB,可能取决于)

选择一列如" SELECT Age ..."在绝大多数情况下,无论如何都会从磁盘读取整行。

因此,为了回答您的问题,您的示例中的SELECT *将更有效率,因为您只需要解析一次查询的开销。