2015-03-31 206 views
-1

我有一個像下面這樣的查詢,請幫忙給出適當的索引,聯繫人表有超過20K的記錄,並且需要將近20秒才能加載。 希望通過group by子句提出問題,如果我刪除group by子句總記錄超過300k。MYSQL GROUP BY - 緩慢查詢

SELECT `a`.*, CONCAT(a.`firstname`, " ", a.`lastname`) AS `cont_name`, CONCAT(a.`position`, "/", a.`company`) AS `comp_pos`, `e`.`name` AS `industry_name`, CONCAT(f.`firstname`, " ", f.`lastname`) AS `created_by` 
FROM `contacts` AS `a` 
LEFT JOIN `user_centres` AS `b` ON a.user_id = b.user_id 
LEFT JOIN `group_contacts` AS `c` ON a.id = c.contact_id 
LEFT JOIN `groups` AS `d` ON c.group_id = d.id 
LEFT JOIN `industries` AS `e` ON e.id = a.industry_id 
LEFT JOIN `users` AS `f` ON f.id = a.user_id 
WHERE (1) 
GROUP BY `a`.`id` 
ORDER BY `a`.`created` desc 

解釋顯示像這樣 - 20145使用臨時;使用文件排序

+0

刪除'組by'。你沒有聚合功能,所以看起來沒有必要。 – 2015-03-31 12:19:33

+0

你可以發佈完整的解釋和表格佈局嗎? LEFT OUTER JOINs是必需的,還是隻能使用INNER JOIN? – Kickstart 2015-03-31 12:22:37

+1

LEFT JOIN'group_contacts' as'c' ON a.id = c.contact_id LEFT JOIN' groups'由於'd' ON c.group_id = d.id是不必要的連接...刪除它 – Javaluca 2015-03-31 12:25:46

回答

0

您可以嘗試以下步驟

  1. 是沒有用的表組(d)的,這樣可以去除左加入到組從此查詢
  2. 添加索引user_idcontact_idindustry_id (我希望這些ID加入表primary_keys)在聯繫人表
  3. 檢查這些ID user_id,contact_idindustry_id類型(INT)是相同的。
0

我們的要求是如下

1)在管理員登錄的所有聯繫人的列表

接觸表

總記錄中的經理/業務員登錄的聯繫人

2)中心明智列表> 20K。

user_centres表中的用戶將有多個條目,即:用戶被分配到多箇中心。

通過排除GROUP BY來執行服務器查詢時,接近30萬個數據導致了問題。

我已經詳細檢查了問題並簡化了查詢,如下所示,此處與user_centres表的連接用於數據的中心明智過濾。

SELECT `a`.*, CONCAT(a.`firstname`, " ", a.`lastname`) AS `cont_name`, 
CONCAT(a.`position`, "/", a.`company`) AS `comp_pos`, `e`.`name` AS `industry_name`, 
CONCAT(f.`firstname`, " ", f.`lastname`) AS `created_by` FROM `contacts` AS `a` 
LEFT JOIN `users` AS `f` ON f.id = a.user_id 
LEFT JOIN `user_centres` AS `b` ON a.user_id = b.user_id 
LEFT JOIN `industries` AS `e` ON e.id = a.industry_id 
WHERE (b.centre_id IN (23, 24, 25, 26, 20, 21, 22, 27, 28)) 
GROUP BY `a`.`id` ORDER BY `a`.`created` desc 

EXPLAIN給出結果爲: - 1個SIMPLE一個索引PRIMARY,USER_ID,AREA_ID,industry_id,國家PRIMARY 4 NULL 20145使用臨時;使用文件排序

請到更多的幫助

聯繫表屏幕 - http://prntscr.com/6o5gw4

user_centres表 - http://prntscr.com/6o5h30

+0

EXPLAIN結果 - http://prntscr.com/6o5h8s – 2015-04-01 14:38:01