请求优化啊,执行时间过长

Pact_Alice 2018-04-26 11:16:40
自认为不是很复杂的语句,但是执行时间很长啊,语句单独拿出来执行是7s,放在存储过程里执行是44s,真的不能接受啊
执行语句是
SELECT 
a.sexs AS sex,
IFNULL(b.percentage,0)AS percentage
FROM (
SELECT 'male' AS sexs
UNION ALL
SELECT 'female'
) a
LEFT JOIN
(
SELECT
P.SEX,
COUNT(1) /
(15315)AS percentage
FROM player_login_logout_log A
LEFT JOIN player_create_log P ON A.`role_id`=P.ROLE_ID
WHERE player_state='login'
-- AND IF(_system_type IS NULL ,0=0,a.system_type=_system_type) AND IF(_platform IS NULL,0=0,a.platform=_platform) AND IF(_zone_id IS NULL ,0=0,a.zone_id=_zone_id)
AND LEFT(A.time,10) BETWEEN '2018-04-01' AND '2018-04-30'
GROUP BY P.SEX

)b ON a.sexs=b.sex;

执行计划是 真的不知道红圈圈是咋来的
...全文
1223 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pact_Alice 2018-04-26
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
player ,这两张表的索引情况,说一下

是这样的表 player_login_logout_log A 的索引是这样的
表 player_create_log P 的索引是这样的
希望您的帮助啊
卖水果的net 2018-04-26
  • 打赏
  • 举报
回复
player ,这两张表的索引情况,说一下
游北亮 2018-04-26
  • 打赏
  • 举报
回复
简单看了一下,2个表应该都没走索引,数据量大了肯定慢, LEFT JOIN player_create_log P ON A.`role_id`=P.ROLE_ID 这个P表的role_id建个索引试试 最简单的就是自己分析了,在SSMS里,按右键,选择“包含实际的执行计划” 看看走的什么索引,不懂可以 截图发出来看看

56,679

社区成员

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

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