加了索引,查询速度为什么还是这么的慢,各位大神求解

刘祥龙 2017-09-28 11:15:15
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月的数据。 为什么要查这么长时间呢
...全文
997 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45017278 2020-05-19
  • 打赏
  • 举报
回复
不要写大于小于号这些符号,用其他方法代替
刘祥龙 2017-10-16
  • 打赏
  • 举报
回复
只运行红色部分还是很慢,其实我的查询条件里已经没用函数了呀,AND a.updateTime > DATE_FORMAT(now(),'%Y-%m-01 00:00:00') and a.updateTime < now()
James__z 2017-10-10
  • 打赏
  • 举报
回复
同意#4的说法!
clark_kidd 2017-10-10
  • 打赏
  • 举报
回复
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 有没有建索引?
clark_kidd 2017-10-10
  • 打赏
  • 举报
回复
SELECT stIsid, SUM(codeValue) codeValue, days --这里这个days来源于子查询函数DATE_FORMAT,所以索引是无效的 from ( 而你后面还用 days 做了分组,肯定慢,索引根本没作用 GROUP BY days,b.tagIsid
OwenZeng_DBA 2017-10-10
  • 打赏
  • 举报
回复
这个版块经常有很多MySQL的问题
clark_kidd 2017-10-10
  • 打赏
  • 举报
回复
引用 1 楼 z10843087 的回复:
[quote=引用 楼主 lxlnulinuli 的回复:] 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月的数据。 为什么要查这么长时间呢
MySQL 的JOIN算法目前还是比较弱的。不支持HASH 不支持merge 。建议 用临时表拆分下试试[/quote] 不是MS SQL吗?怎么是MySQL了?
OwenZeng_DBA 2017-09-28
  • 打赏
  • 举报
回复
引用 楼主 lxlnulinuli 的回复:
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月的数据。 为什么要查这么长时间呢
MySQL 的JOIN算法目前还是比较弱的。不支持HASH 不支持merge 。建议 用临时表拆分下试试

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧