Mysql 如何在具有百万行的大型数据库表上优化此查询
假设我正确地计算出了哪些列指向哪些表,考虑到原始查询中滥用了GROUP BY,这个查询应该是等效的,甚至更好Mysql 如何在具有百万行的大型数据库表上优化此查询,mysql,query-optimization,Mysql,Query Optimization,假设我正确地计算出了哪些列指向哪些表,考虑到原始查询中滥用了GROUP BY,这个查询应该是等效的,甚至更好 SELECT l.player_id,game_group_type,game_type,no_of_card,room_group_type,device_type FROM rummy_player_login_master k JOIN ( SELECT no_of_card,game_group_type,game_type,room_group_type
SELECT l.player_id,game_group_type,game_type,no_of_card,room_group_type,device_type
FROM rummy_player_login_master k
JOIN
(
SELECT no_of_card,game_group_type,game_type,room_group_type,player_id,login_id
FROM rummy_game_type_master i
JOIN
(
SELECT game_type_id, room_group_type,player_id,login_id
FROM rummy_room_group_master g
JOIN
(
SELECT room_group_id ,player_id,login_id
FROM rummy_room_domain_group_mapping e
JOIN
(
SELECT common_id,player_id,login_id
FROM rummy_room_master c
JOIN
(
SELECT room_id ,player_id,login_id
FROM rummy_room_session_master a
JOIN
(
SELECT MAX(session_id) AS session_id,player_id,login_id
FROM rummy_room_session_player_mapping
GROUP BY player_id
) b
ON a.session_id = b.session_id
) d
ON c.room_id = d.room_id
) f
ON e.common_id =f.common_id
) h
ON g.room_group_id = h.room_group_id
) j
ON i.game_type_id = j.game_type_id
) l
ON k.login_id = l.login_id
GROUP BY l.player_id
如果仍需要提高性能,请尝试以下操作:
SELECT
rrspm.player_id,
rgtm.game_group_type,
rgtm.game_type,
rgtm.no_of_card,
rrgm.room_group_type,
rplm.device_type
FROM rummy_room_session_player_mapping rrspm
LEFT OUTER JOIN rummy_room_session_player_mapping later_rrspm
ON later_rrspm.player_id = later_rrspm.player_id
AND later_rrspm.session_id > rrspm.session_id
INNER JOIN rummy_player_login_master rplm
ON rrspm.login_id = rplm.login_id
INNER JOIN rummy_room_session_master rrsm
ON rrsm.session_id = rrspm.session_id
INNER JOIN rummy_room_master rrm
ON rrm.room_id = rrsm.room_id
INNER JOIN rummy_room_domain_group_mapping rrdgm
ON rrdgm.common_id = rrm.common_id
INNER JOIN rummy_room_group_master rrgm
ON rrgm.room_group_id = rrdgm.room_group_id
INNER JOIN rummy_game_type_master rgtm
ON rgtm.game_type_id = rrgm.game_type_id
WHERE later_rrspm.session_id IS NULL
原始查询中的语法看起来与我开始使用数据库时遇到的困难相同,因为您没有正确地将数据视为基于集合的数据
如果我的查询有效,我建议您研究我所做的工作,并了解如何不需要执行所有嵌套选择来获得所需的内容。数据库本身将按其需要的顺序排列,您只需告诉它哪些列将相应的表连接在一起。格式化代码。排序-仍然难以阅读。请为此查询中使用的所有表提供SHOW CREATE TABLE tablename。此问题需要更多上下文。需要一个模式和一个解释。也许做一个解释并在帖子中展示会有帮助…我们也不知道你的表结构…非常感谢。我会试试的。
ALTER TABLE rummy_room_session_player_mapping
ADD INDEX `player_session` (`player_id`,`session_id`)