Mysql 子查询如何复制结果?它是否为结果中的每一行发送相同的请求?
我有两个不同的问题:Mysql 子查询如何复制结果?它是否为结果中的每一行发送相同的请求?,mysql,sql,query-optimization,subquery,Mysql,Sql,Query Optimization,Subquery,我有两个不同的问题: SELECT `ad_general`.`id` FROM (`ad_general`) WHERE `ad_general`.`city` = '708' ORDER BY `ad_general`.`id` desc LIMIT 15 SELECT count(`ad_general`.`id`) as count FROM (`ad_general`) WHERE `city` = '708' 为了避免向mysql结果发送多个请求以提高性能,我结合了这两
SELECT `ad_general`.`id`
FROM (`ad_general`)
WHERE `ad_general`.`city` = '708'
ORDER BY `ad_general`.`id` desc
LIMIT 15
SELECT count(`ad_general`.`id`) as count
FROM (`ad_general`)
WHERE `city` = '708'
为了避免向mysql结果发送多个请求以提高性能,我结合了这两个查询
SELECT `ad_general`.`id`, (
SELECT count(`ad_general`.`id`) as count
FROM (`ad_general`)
WHERE `city` = 708 ) AS count,
FROM (`ad_general`)
WHERE `ad_general`.`city` = '708'
ORDER BY `ad_general`.`id` desc
LIMIT 15
在第一种方法中,“count”列只有一行,显然只有一个count列请求
但在组合查询中,“count”列有15个相同的行
我想知道mysql如何复制子查询中的“count”列。如果它为每一行发送相同的计数请求(在这种情况下是15次),那么在这种情况下使用组合查询是不明智的。在第一个查询中,您向数据库服务器请求两条信息。首先,表中的前15行。第二,表中的行总数 在第二个查询中,您要的是16。您需要表格的前15行,对于每一行,您需要总行数 这对性能的影响取决于数据库的详细信息。但不,这并不明智:只需提出两个问题。这就是Django等ORM处理分页的方法
过早优化通常是个坏主意。如果您不确定发送COUNT查询是否会对您造成伤害(很可能不会),请不要为“修复”您不知道的问题增加复杂性。如果你确信这会伤害到你,那么衡量这两种方法的表现,看看哪一种更好。适当的性能优化(几乎可以肯定没有必要)是在就绪缓存中保留非规范化的行数。在第一个查询中,您向数据库服务器请求两条信息。首先,表中的前15行。第二,表中的行总数 在第二个查询中,您要的是16。您需要表格的前15行,对于每一行,您需要总行数 这对性能的影响取决于数据库的详细信息。但不,这并不明智:只需提出两个问题。这就是Django等ORM处理分页的方法
过早优化通常是个坏主意。如果您不确定发送COUNT查询是否会对您造成伤害(很可能不会),请不要为“修复”您不知道的问题增加复杂性。如果你确信这会伤害到你,那么衡量这两种方法的表现,看看哪一种更好。适当的性能优化(几乎肯定没有必要)是在就绪缓存中保留非规范化的行数。大多数人建议避免innodb中的计数查询。大多数人建议避免innodb中的计数查询。