SELECT stIsid,
SUM(codeValue) codeValue,
days
from (
select
a.stIsid,
a.dvIsid,
a.tagIsid,
(max(CAST(a.codeValue as SIGNED)) - MIN(CAST(a.codeValue as SIGNED))) codeValue,
DATE_FORMAT(a.updateTime, "%Y-%m-%d" ) days
from tbeqmhistorydata a
LEFT JOIN tbcodeinfo b on a.tagIsid = b.tagIsid
LEFT JOIN eqmpowerinfo c on a.dvIsid = c.dvIsid
WHERE b.codeType = "EQM_YGDN" and c.dvType = 'DLY'
AND a.updateTime > DATE_FORMAT(now(),'%Y-%m-01 00:00:00') and a.updateTime < now()
GROUP BY days,b.tagIsid)
zz GROUP BY days
這是我的查詢SQL,查詢本月也就是9月的資料用了12秒,然后我EXPLAIN 了一下發現它查了tbeqmhistorydata這張表691315行資料,updateTime列我加了索引,9月的資料也才64800條,但是我 select count(*) from tbeqmhistorydata 一共有 734389記錄,這是所有記錄,包括7,8,9月的資料。 為什么要查這么長時間呢
uj5u.com熱心網友回復:
MySQL 的JOIN演算法目前還是比較弱的。不支持HASH 不支持merge 。建議 用臨時表拆分下試試
uj5u.com熱心網友回復:
不是MS SQL嗎?怎么是MySQL了?
uj5u.com熱心網友回復:
這個版塊經常有很多MySQL的問題uj5u.com熱心網友回復:
SELECT stIsid,SUM(codeValue) codeValue,
days --這里這個days來源于子查詢函式DATE_FORMAT,所以索引是無效的
from (
而你后面還用 days 做了分組,肯定慢,索引根本沒作用
GROUP BY days,b.tagIsid
uj5u.com熱心網友回復:
SELECT stIsid,SUM(codeValue) codeValue,
days
from (
select
a.stIsid,
a.dvIsid,
a.tagIsid,
(max(CAST(a.codeValue as SIGNED)) - MIN(CAST(a.codeValue as SIGNED))) codeValue,
DATE_FORMAT(a.updateTime, "%Y-%m-%d" ) days
from tbeqmhistorydata a
LEFT JOIN tbcodeinfo b on a.tagIsid = b.tagIsid
LEFT JOIN eqmpowerinfo c on a.dvIsid = c.dvIsid
WHERE b.codeType = "EQM_YGDN" and c.dvType = 'DLY'
AND a.updateTime > DATE_FORMAT(now(),'%Y-%m-01 00:00:00') and a.updateTime < now()
GROUP BY days,b.tagIsid
)
zz GROUP BY days
只運行紅色部分要用多久呢?去除掉 GROUP BY days,b.tagIsid 用多久?codeType 和 dvType 有沒有建索引?
uj5u.com熱心網友回復:
同意#4的說法!
uj5u.com熱心網友回復:
只運行紅色部分還是很慢,其實我的查詢條件里已經沒用函式了呀,AND a.updateTime > DATE_FORMAT(now(),'%Y-%m-01 00:00:00') and a.updateTime < now()uj5u.com熱心網友回復:
不要寫大于小于號這些符號,用其他方法代替轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/31223.html
標籤:應用實例
下一篇:請教大神一個基礎問題
