假设我有一个名为“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
事情是,视情况而定,我可能需要也可能不需要所有数据。那么,我应该在需要时逐个获取每个数据,还是应该立即获取所有数据然后根据需要使用?
感谢您的帮助!
答案 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 *将更有效率,因为您只需要解析一次查询的开销。