SELECT
t.str_code AS strCode,
t.str_unit AS strUnitName,
COUNT( m.uuid ) AS intNum
FROM
( SELECT str_code, str_unit, ifnull( INT_ORDER, 0 ) AS intOrder FROM base_unit WHERE int_unit_level = 1 ) t
LEFT JOIN members m ON m.unit_fenju_uid = t.str_code
AND m.STR_MEMBER_TYPE = 'normal'
LEFT JOIN GROUP_LINK l ON l.STR_MEMBER_UID = m.uuid
WHERE
1 = 1
GROUP BY
t.str_code,
t.str_unit,
t.intOrder
ORDER BY
COUNT( m.uuid ) DESC,
t.intOrder ASC

orcl向mysql中移植發現查詢好慢 mysql要120s orcl秒出
uj5u.com熱心網友回復:
1. GROUP_LINK 表在查詢中沒用啊;2. 在 members.unit_fenju_uid 上加個索引試試;
看看效果,再繼續。。。
uj5u.com熱心網友回復:
1.left join關聯條件需要建立索引;2.子查詢t沒有必要,把里面where條件放到外層最后也一樣;
3.不清楚你的表結構,不知道你的group by 是什么用途
uj5u.com熱心網友回復:
where 1=1 這種條件,如果被我們的DBA發現,不被批死才怪呢,SQL語不能這樣子寫的,這樣子容易造成全表掃描啊。uj5u.com熱心網友回復:
ifnull is null 在我們的DBA中檢查,都可以不出現,要寫入資料時就必須填值,我的DB里面沒有欄位是允許為空的。那怕是日期也有一個假的日期值填入。uj5u.com熱心網友回復:
沒有你的表結構,也不了解你的業務,只能優化的這個樣子。如果業務允許,把left join換成join會快一些。另外看你的幾個表,都沒有索引,怎么加索引,百度一下吧,好多內容的。
-- SELECT
-- t.str_code AS strcode,
-- t.str_unit AS strunitname,
-- COUNT(m.uuid) AS intnum
-- FROM
-- base_unit t
-- LEFT JOIN members m ON
-- m.unit_fenju_uid = t.str_code
-- AND
-- m.str_member_type = 'normal'
-- LEFT JOIN group_link l ON l.str_member_uid = m.uuid
-- WHERE
-- t.int_unit_level = 1
-- GROUP BY
-- t.str_code,
-- t.str_unit,
-- ifnull(t.int_order,0)
-- ORDER BY
-- COUNT(m.uuid) DESC,
-- ifnull(t.int_order,0) ASC ;
uj5u.com熱心網友回復:
前幾天在書上(深入淺出mysql)看到對于這種恒成立的條件,mysql會自動優化掉(即去掉),
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/57377.html
標籤:MySQL
上一篇:求一條關聯SQL的寫法?
下一篇:求大佬給個菲律賓省市sql腳本
