自认为不是很复杂的语句,但是执行时间很长啊,语句单独拿出来执行是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;
执行计划是 真的不知道红圈圈是咋来的
执行语句是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;
执行计划是 真的不知道红圈圈是咋来的
解决方案 »
- sql 触发器
- 关于left join 和count一起使用的疑惑
- 是否可以用vc工程建立工程 包含mysql源码文件??
- 一个表被group by 后,被浓缩的列中排列问题,寻一句快速的SQL语句
- 江湖救急!要出人命了!MYSQL问题!
- mysql_select_db 函数在失败的情况下,其默认的数据库还是原来的吗?
- 讨论:哪种MySQL后台管理软件最好用?
- Mysql中使用sql_calc_found_rows()返回的行数步正确
- Decimal类型的字段为什么不能为Null?
- 获取查询过指定的多个域名中的每一个的IP及该IP的总查询次数
- mysql cluster ndb节点与sql节点问题及在线添加NDB节点
- mysql sql优化
是这样的表 player_login_logout_log A 的索引是这样的
表 player_create_log P 的索引是这样的
希望您的帮助啊
这个P表的role_id建个索引试试最简单的就是自己分析了,在SSMS里,按右键,选择“包含实际的执行计划”
看看走的什么索引,不懂可以 截图发出来看看