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

More efficient way to fetch data from MySQL

假设我有一个 MySQL table 叫做 "User".

ID, Name, Email, Age, Gender, Country, Hometown, City, Address, 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

SELECT Email FROM User 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 Address FROM User 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

事实是,根据情况,我可能需要也可能不需要所有数据。那么,我是应该在需要的时候一个一个地取数据,还是一次取完所有的数据,然后根据需要使用?

感谢您的帮助!

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

专业提示:不要使用 SELECT *。而是枚举你想要的列,就像这样。

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

这种方法有很多优点,尤其是在 return 多行(您的行没有)的查询中。

每次查询数据库都会花费一些费用。 PHP 必须将查询发送到 SQL 服务器,查询分析器必须解析您的查询,优化它,将其翻译成一些内部代码,查找 table,在索引文件中查找on the disk, seek in the data file on the disk.

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

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

在绝大多数情况下,选择像 "SELECT Age ..." 这样的一列将会从磁盘读取整行。

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