Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 子查询如何复制结果?它是否为结果中的每一行发送相同的请求?_Mysql_Sql_Query Optimization_Subquery - Fatal编程技术网

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中的计数查询。