0
我正在尝试创建一些有用的搜索筛选器,其中包含一旦选择了选项就会被筛选的子集计数。但是,对于相当大的数据表,我怀疑我的查询是非常低效的。我不确定还有什么其他策略可以解决这个问题。如何使用GROUP BY和ORDER BY来处理MySQL结果集筛选器
id | color | size
1 | Red | Small
2 | Blue | Large
3 | Green | Large
4 | Blue | Small
5 | Red | Small
6 | Red | Small
我有8个属性列(如颜色,大小,类型)与500K加表中的记录。
我试图打造“过滤器”是这样的:
SELECT `color`, COUNT(`color`)
FROM `table`
GROUP BY `color`
ORDER BY `color`
而且将导致具有类似。
Blue (2)
Green (1)
Red (3)
Large (2)
Small (4)
然后,一旦有人选择过滤器,如小(4)中的一个,那么我们就需要添加一个WHERE大小=小的话,那就有这样的事情。
SELECT `color`, COUNT(`color`)
FROM `table`
WHERE `size` = 'Small'
GROUP BY `color`
ORDER BY `color`
Blue (1)
Red (3)
但是,这开始运行得非常慢。我认为这是因为按顺序排列的组可能会创建临时表?另外,必须为每个过滤器块运行不同的查询。用于彩色滤光片的SELECT color
,用于尺寸滤光片的SELECT size
。这导致这些groupby/orderby查询中的8个查询在500k数据表上运行。有没有更好的方法呢?
一个问题是,结果集一直在变化,所以即使缓存5分钟也可能有相当过期的结果数。
此外,请让我知道是否有一些额外的数据,我需要提供,以帮助开发替代品。
感谢约翰。我有索引。 –