我从另一台服务器获取多达1000个id,以便向访问者显示它们,因此我必须使用in查询,如:
SELECT * FROM `table` WHERE `id` IN (23221, 42422, 2342342....) // and so on, up to 1000
假设有三分之一的访客会观看所有的1000个id,而有三分之二的访客只会观看前50个id。
对于性能/工作负载来说,一个查询处理所有1000个id,或者将它们分成20个查询,每个查询处理50个id,这样做会更好吗?所以当前50个被观察到时,查询下50个等等。
编辑:
拆分时我不需要使用limit,这意味着查询中的id最多为50个。那么更好的方法是,一次查询1000个id,或者每50个id查询20个id?
编辑:
好吧,我简短而直接地问:1000个id在一个查询中不是太多吗?我在这里读到了如何优化一个sql查询,其中有成千上万的where子句,这些where/or语句都是不好的??
2条答案
按热度按时间tsm1rwdh1#
您可以看看这里提供的答案:mysql数据-实现分页的最佳方式?
使用limit语句只能返回结果的一部分。通过更改limit语句中的参数,可以重用查询。
要知道,除非使用“order by”,否则sql server并不总是返回相同的记录。换句话说,如果某个记录由于发生更新而无法读取,而数据库服务器可以读取下一个记录,它将获取下一个记录(以便尽快给出结果)。我不确定这个限制是否迫使数据库服务器考虑某种顺序(我不太熟悉mysql)。
kmbjn2e32#
假设有三分之一的访客会观看所有的1000个id,而有三分之二的访客只会观看前50个id。
因为你想优化你的React,因为你假设访客会如何对待它。
对于性能/工作负载来说,一个查询处理所有1000个id,或者将它们分成20个查询,每个查询处理50个id,这样做会更好吗?所以当前50个被观察到时,查询下50个等等。
是的,你是对的,你应该限制返回响应。这是一个如何实现您的需求的示例(我不太了解mysql,但这是如何获得所需结果的)。
如果是的话
SQL SERVER
:上面的查询将做的是:它将获得所发布的id的所有数据,然后它将按id升序排序。然后从他们的选择,它将只选择前10/50/100,下次,它将选择下一个10/50/100或任何你的选择是采取和跳过选择。希望这对男人有帮助:)