我困在一個相當複雜的查詢中。製作大型SQL查詢效率
我正在尋找一個查詢,顯示「前五名客戶」以及一些關鍵指標(包括條件計數)關於每個這些客戶。每個不同的指標都使用完全不同的連接結構。
+-----------+------------+ +-----------+------------+ +-----------+------------+
| customer | | | metricn | | | metricn_lineitem |
+-----------+------------+ +-----------+------------+ +-----------+------------+
| id | Name | | id | customer_id| |id |metricn_id |
| 1 | Customer1 | | 1 | 1 | | 1 | 1 |
| 2 | Customer2 | | 2 | 2 | | 2 | 1 |
+-----------+------------+ +-----------+------------+ +-----------+------------+
問題是我總是想按這個客戶表分組。
我首先嚐試將所有連接放入原始查詢中,但查詢性能很差。然後我嘗試使用子查詢,但我無法讓他們按原始醫院ID進行分組。
這裏有一個簡單的查詢
SELECT
customer.name,
(SELECT COUNT(metric1_lineitem.id)
FROM metric1 INNER JOIN metric1_lineitem
ON metric1_lineitem.metric1_id = metric1.id
WHERE metric1.customer_id = customer_id
) as metric_1,
(SELECT COUNT(metric2_lineitem.id)
FROM metric2 INNER JOIN metric2_lineitem
ON metric2_lineitem.metric2_id = metric2.id
WHERE metric2.customer_id = customer_id
) as metric_2
FROM customer
GROUP BY customer.name
SORT BY COUNT(metric1.id) DESC
LIMIT 5
有什麼建議?謝謝!
我不知道關於mysql,但在sql server中,這很可能會加速它,因爲相關的子查詢基本上是一行一行地處理的遊標,這是一個基於集合的解決方案。 – HLGEM