mysql 联合查询 order by 慢的问题

mysql 联合查询 order by 慢的问题

风柔一江水 发布于 2021-12-01 字数 1468 浏览 733 回复 7

SQL语句:
select `fc`.`projectsid` AS `projectsid`,`fc`.`description` AS `description`,`fc`.`createdtime` AS `createdtime`,`fc`.`feeperiod` AS `feeperiod`,`fc`.`feestartdate` AS `feestartdate`,`fc`.`feeenddate` AS `feeenddate`,ifnull(`fc`.`feeamount`,0) AS `feeamount`,`fc`.`cheweino` AS `cheweino`,`fc`.`cheweisid` AS `cheweisid`,`p`.`projectname` AS `projectname`,`fi`.`feeitemname` AS `feeitemname`,`fc`.`modifiedtime` AS `modifiedtime`,ifnull(`f`.`cf_1052`,0) AS `fangarea`,ifnull(`f`.`cf_1054`,_utf8'') AS `fangstatus`,ifnull(`f`.`cf_1042`,_utf8'') AS `buildtype`
from (((`ec_feecreates` `fc` join `ec_feeitems` `fi` on((`fc`.`feeitemsid` = `fi`.`feeitemsid`)))
join `ec_fanginfos` `f` on((`fc`.`fanginfosid` = `f`.`fanginfosid`)))
join `ec_projects` `p` on((`fc`.`projectsid` = `p`.`projectsid`)))
where ((`fc`.`feestatus` = _utf8'未收') and (`p`.`deleted` = 0) and (`fi`.`deleted` = 0) and (`f`.`deleted` = 0))
order by projectname,fangstatus

版本:MYSQL 5.6.25

现象:不加order by ,执行速度不到1秒
加了 order by 执行速度 8秒
数据量 4万条,projectname,fangstatus 两个字段均在各自的表上建有单独索引
采用explain 执行了一下,Using where; Using temporary; Using filesort  39000行,貌似是先生成一个临时表,然后再去排序,造成时间过长

这种情况下该如何优化?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

带上头具痛哭 2021-12-01 7 楼

多慢?

千纸鹤带着心事 2021-12-01 6 楼

回复
查询出结果需要30多秒,机器配置太破应该也有一部分原因……

够钟 2021-12-01 5 楼

前两天用MySQL存储数据,

有一个表数据量有200W,结果一关联,那速度我都醉了……

PS:主键、索引都正确建立了

千笙结 2021-12-01 4 楼

请列举一些文章以便学习

白龙吟 2021-12-01 3 楼

order by 应该是无法索引。

看使用物化视图试试。

同时设置下sort_buffer_size大小。

成熟的代价 2021-12-01 2 楼

保存的时候,就是字符串

想挽留 2021-12-01 1 楼

feestatus 这个为何不用int
ifnull用程序来搞吧,数据库没必要这样做。