在我的系统中,我有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;
答案 0 :(得分:0)
<rant>
这是一个糟糕的用户界面,需要翻阅数千页。最好要求用户在下载到小数量的页面之前进行一些过滤。</rant>
回到您的问题...
如果group_id
和price
位于相同的表中,那么简单的答案就是添加复合INDEX(group_id, price)
。有了这个,优化器可以按group_id
和进行过滤price
并进入LIMIT
。
如果没有这个,可以做的最好的事情就是找到group_id = 123
的所有行,查找所有价格,对临时表进行排序,然后再查看LIMIT
。注意&#34;所有&#34;。
但是...... OFFSET
本身就是 案例的杀手。执行必须超过10000行,然后才能获得所需的10行。这个问题我有一个解决方案。记住where you left off。 (但是,我再说一遍,对于两个表中的WHERE
和ORDER BY
拆分,无法做到这一点。)