Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在具有百万行的大型数据库表上优化此查询_Mysql_Query Optimization - Fatal编程技术网

Mysql 如何在具有百万行的大型数据库表上优化此查询

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

假设我正确地计算出了哪些列指向哪些表,考虑到原始查询中滥用了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,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`)