gpt4 book ai didi

mysql - 该子查询如何复制结果?它是否为结果中的每一行发送相同的请求?

转载 作者:行者123 更新时间:2023-11-29 00:50:21 25 4
gpt4 key购买 nike

我有两个单独的查询:

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 如何复制该子查询中的“计数”列。如果它为每一行发送相同的计数请求(在这种情况下为 15 次),那么在这种情况下使用组合查询是不明智的。

最佳答案

在第一个查询中,您向数据库服务器询问两条信息。首先,表中的前 15 行。第二,表的总行数。

在第二个查询中,您要求它返回 16。您需要表格的前 15 行,并且对于每一行,您需要总行数。

这对性能的影响取决于数据库的细节。但是不,这不明智:只需提出两个查询。这就是 Django 等 ORM 处理分页的方法。

过早的优化通常不是一个好主意。如果您不确定发送 COUNT 个查询是否对您造成伤害(可能不会),请不要增加复杂性来“修复”您不知道的问题。如果您确定它伤害了您,那么衡量这两种方法的性能,看看哪一种更好。适当的性能优化(几乎肯定没有必要)是在就绪缓存中保留非规范化的行数。

关于mysql - 该子查询如何复制结果?它是否为结果中的每一行发送相同的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8846292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com