gpt4 book ai didi

mysql - 大表复杂查询

转载 作者:行者123 更新时间:2023-11-30 22:56:09 25 4
gpt4 key购买 nike

我有一个很大的用户表 (3M),结构如下:

age  (int) 
country (FK)
city (text)
gender (text)
active (bool)

我的目标是运行搜索,找到 15 个具有给定年龄、性别、城市和国家/地区的用户(活跃用户优先)。

由于表格的大小,我有两个问题:

  • 即使有索引,也需要很长时间(几百毫秒)

  • 每次运行查询的结果都必须不同。目前我执行使用 LIMIT 30 查询并从中随机获得 15 个结果,但是30个结果总是一样的。整张 table 太大做不来洗牌。

是否有一些常用的解决方案来克服类似的问题?

数据库服务器是MySQL,在Django中实现。我还可以访问 Redis 缓存。

最佳答案

您可以使用不同的限制和偏移量进行查询。 From the docs

您只需要跟踪自己的位置。

# My example search criteria.
age = 21
gender = 'M'
city = 'Redmond'
country = 'US'

offset = 0
while True:
next_fifteen = User.objects.filter(age=age,
gender=gender,
city=city,
country=country)[offset:offset+15]
if not next_fifteen.exists():
break
<do whatever>
offset += 15

这将创建一个使用 OFFSET 45 LIMIT 15

的 SQL 语句

您可以看到做类似事情的网站。比如谷歌搜索结果。转到第二页或第三页,您会注意到一个 url 参数 &start=60。并不是说我知道谷歌是如何运作的,但这是相同的基本原则。

关于mysql - 大表复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309236/

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