自认为不是很复杂的语句,但是执行时间很长啊,语句单独拿出来执行是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;
执行计划是 真的不知道红圈圈是咋来的

解决方案 »

  1.   

    player  ,这两张表的索引情况,说一下
      

  2.   

     
    是这样的表  player_login_logout_log A 的索引是这样的 
     表 player_create_log P 的索引是这样的  
    希望您的帮助啊
     
      

  3.   

    简单看了一下,2个表应该都没走索引,数据量大了肯定慢,LEFT JOIN player_create_log P ON A.`role_id`=P.ROLE_ID
    这个P表的role_id建个索引试试最简单的就是自己分析了,在SSMS里,按右键,选择“包含实际的执行计划”
    看看走的什么索引,不懂可以 截图发出来看看