[英]MySQL Group running too slow
我有3個MySQL表,我需要從中獲取結果,這些表是:
1. Towns
Fields Towncode and Townname
2. Students
Fields student_id,name,surname,address,streetcode,towncode,HeadOfFamily
3. Phonebank
Fields student_id,contacted,towncode
現在,我需要一個mysql語句(a)從“學生”表中獲取家庭總數,以及(b)為該特定城鎮聯系的學生數。
到步驟(a)為止,我已經管理了哪個,並且速度非常快:
SELECT
t.towncode as towncode,
t.townname as townname,
(SELECT COUNT(*)
FROM students p
WHERE p.towncode=t.towncode
and p.student_hh='H') AS households
FROM
towns t
ORDER BY
t.towncode ASC
但我無法設法插入另一個“ SELECT STATEMENT”來獲取該特定城鎮的電話數量。
你能幫忙嗎?
對城鎮進行單項記錄可能會傷害您。 我會先查詢學生表,然后再使用連接到城鎮的表。
對於索引,我將具有以下索引
table index
towns ( towncode, townname )
students ( student_hh, towncode )
SELECT
t.towncode as towncode,
t.townname as townname,
TownCnts.households
FROM
towns t
JOIN ( SELECT
p.towncode,
COUNT(*) households
from
students p
where
p.student_hh = 'H'
group by
p.towncode ) as TownCnts
ON t.towncode = TownCnts.towncode
ORDER BY
t.towncode ASC
假設“呼叫”數是PhoneBank
表中具有特定城鎮代碼的行數,則可以添加另一個子選擇:
SELECT t.towncode as towncode, t.townname as townname,
(SELECT COUNT(*)
FROM students p
WHERE p.towncode = t.towncode and p.student_hh='H'
) AS households,
(SELECT COUNT(*)
FROM phonebank pb
WHERE pb.towncode = t.towncode
) AS calls
FROM towns t
ORDER BY t.towncode ASC ;
您的問題有點含糊。 您可能希望在第二個查詢中使用count(distinct studentid)
,而不是count(*)
。
要優化此查詢,請創建以下索引:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.