如何加快产品搜索查询

How to speedup product search queries

在我的系统中,我在 table products(id, price, name) 中有 1 000 000 条记录,每个分类组有 ~12 000 个产品 - table groups(group_id, product_id).

我想要按 price/name/id/whatever 排序的组中的产品。加入本身需要 300 毫秒,然后在接下来的 200 次排序(文件排序),所以我已经失去了 500 毫秒只是为了排序东西,而不是加入其他 30 tables 来获取业务数据。

我想知道其他公司有多大处理它,例如我可以在亚马逊上按价格排序显示 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>有几千页要翻,真是可怜UI。最好要求用户在下降到 small 数量的 'pages' 之前进行一些过滤。</rant> 回到你的问题...

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

没有它,最好的办法是找到所有带有 group_id = 123 的行,找到它们的所有价格,对温度 table 进行排序,然后才查看 LIMIT .注意 "all".

但是... OFFSET 本身就是 任一 情况下的杀手。在到达您想要的 10 行之前,执行必须超过 10000 行。这个问题我有解决方案。记住where you left off。 (但是,我再说一遍,这不能用 WHEREORDER BY 分成两个 table 来完成。)