gpt4 book ai didi

mysql - 如何加快产品搜索查询速度

转载 作者:行者123 更新时间:2023-11-29 19:12:44 25 4
gpt4 key购买 nike

在我的系统中,表 products(id、price、name) 中有 1 000 000 条记录,每个分类组有大约 12 000 个产品 - 表组(group_id、product_id)。

我想获取按价格/名称/ID/其他内容排序的组中的产品。 Join 本身需要 300 毫秒,然后排序(文件排序)接下来的 200 毫秒,所以我仅仅为了排序就损失了 500 毫秒秒,更不用说加入其他 30 个表来获取业务数据了。

我想知道其他公司有多大处理它,例如我可以在亚马逊上显示按价格排序的 12 000 个页面。我的竞争对手的网站可以在每个页面不到 150 毫秒的时间内显示 1158 个页面(首次点击也是 150 毫秒)。目录中是否有 30 个产品或 300 000 个产品并不重要。

我应该使用哪些技巧和技术来实现这样的速度?

我已经拥有所有可能的索引,并且使用缓冲区大小没有帮助。查询示例:

SELECT products.id
FROM products
JOIN groups ON products.id = groups.product_id
WHERE groups.group_id = '123'
ORDER BY products.price DESC
limit 10000, 100;

最佳答案

<rant>有数千页需要翻阅,这是一个糟糕的用户界面。最好要求用户在进入少量“页面”之前进行一些过滤。 </rant>回到你的问题...

如果group_idprice在同一个表中,简单的答案是添加复合 INDEX(group_id, price) 。这样,优化器就可以过滤 group_id 扫描price 进入LIMIT .

如果没有这个,最好的办法就是找到带有 group_id = 123 的所有行。 ,找到所有价格,对临时表进行排序,然后查看 LIMIT 。注意“全部”。

但是... OFFSET无论哪种情况,它本身都是一个 killer 。在达到您想要的 10 行之前,执行必须步进超过 10000 行。这个问题我有办法解决。记住where you left off 。 (但是,我再说一遍,这不能通过将 WHEREORDER BY 拆分到两个表来完成。)

关于mysql - 如何加快产品搜索查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957517/

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