如何加速产品搜索查询

时间:2017-03-22 16:28:48

标签: mysql sorting database-design e-commerce

在我的系统中,我有1 000 000个表产品(ID,价格,名称)和分类组的记录,每个产品大约有12 000个产品 - 表组(group_id,product_id)。

我想按照价格/名称/ ID /等等分组产品。加入本身需要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;

1 个答案:

答案 0 :(得分:0)

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

如果group_idprice位于相同的表中,那么简单的答案就是添加复合INDEX(group_id, price)。有了这个,优化器可以按group_id 进行过滤price 进入LIMIT

如果没有这个,可以做的最好的事情就是找到group_id = 123的所有行,查找所有价格,对临时表进行排序,然后再查看LIMIT。注意&#34;所有&#34;。

但是...... OFFSET本身就是 案例的杀手。执行必须超过10000行,然后才能获得所需的10行。这个问题我有一个解决方案。记住where you left off。 (但是,我再说一遍,对于两个表中的WHEREORDER BY拆分,无法做到这一点。)