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分鐘也可能有相當過期的結果數。
此外,請讓我知道是否有一些額外的數據,我需要提供,以幫助開發替代品。
感謝約翰。我有索引。 –