这段sql还有优化的可能吗?

mysqldbd 2011-05-31 01:48:17
Select  'ddd' b,ii.item_id, ii.item_code, ii.item_cn_name, ii.item_en_name,
year(mda.period_start_date) y, month(mda.period_end_date) m, mda.metadata_type, mda.metadata_code,
mda.period_type, mda.data_id, md.data_value, mda.data_attr_code, mda.data_scale_code, mda.data_unit_code
FROM csf_maec.maec_data_attr mda LEFT JOIN csf_maec.item_info ii ON mda.item_id=ii.item_id
LEFT JOIN csf_maec.maec_data md ON mda.data_id = md.data_id
WHERE ii.item_code ='001.001.001.002'
AND mda.period_type = 'Y'
and mda.data_attr_code = 'CV'
and (
(mda.metadata_type = 'PRICE' AND mda.metadata_code='CURRENT')
or
(mda.metadata_type = 'AREA' AND mda.metadata_code='PBJ')
or
(mda.metadata_type = 'INDUSTRY' AND mda.metadata_code='INDUSTRY_1ST')
)
GROUP BY mda.data_id
HAVING count(mda.data_id)=3 ;


explain之后的结论如下:

'1', 'SIMPLE', 'ii', 'const', 'PRIMARY,idx_item_info_unq,idx_item_code', 'idx_item_info_unq', '62', 'const', '1', 'Using temporary; Using filesort'
'1', 'SIMPLE', 'mda', 'ref', 'item_id', 'item_id', '4', 'const', '45672', 'Using where'
'1', 'SIMPLE', 'md', 'eq_ref', 'PRIMARY', 'PRIMARY', '4', 'csf_maec.mda.data_id', '1', ''


maec_data_attr表数据量180W,maec_data表140W,item_info表1000条,整个sql查询出来结果是32条记录。
...全文
58 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2011-05-31
  • 打赏
  • 举报
回复
看不出来怎么优化 有Using filesort肯定要慢
mysqldbd 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mr_mablevi 的回复:]
ii的索引是怎么样的?
[/Quote]

item_code字段。
小小小小周 2011-05-31
  • 打赏
  • 举报
回复
ii的索引是怎么样的?
ACMAIN_CHM 2011-05-31
  • 打赏
  • 举报
回复
语句太长了,排版也有些乱。需要有空时花时间整理分析。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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