MySQL子查询

第一次看这样的子查询,explain第一次分析语句的时候感觉受影响行数还是比较少的,至少相对于下面的连接查询,

SELECT
                        t.t_date AS 'reportdate',
                        t.game_id,
                        t.platform,
                        t.source,
                        CASE t.data_type
                    WHEN 'open' THEN
                        FLOOR(t.dev_num * 0.9)
                    ELSE
                        t.dev_num
                    END AS 'start_num',
                     (
                        SELECT
                            FLOOR(x.dev_num * 0.8)
                        FROM
                            res_md_device_report x
                        WHERE
                            x.data_type = 'activate'
                        AND x.type = t.type
                        AND x.game_id = t.game_id
                        AND x.source = t.source
                      AND x.platform = t.platform
                        AND t.t_date = x.t_date
                    ) AS 'activate_num'
                    FROM
                        `res_md_device_report` t
                    WHERE 1 = 1 {$cond}
                    AND type = 1
                    AND data_type = 'open'
                    ORDER BY
                        t_date DESC
                    LIMIT $index,$rows

连接查询:

SELECT bt.t_date,bt.platform,bt.game_id,bt.source,bt.dev_num AS open_num, tt1.dev_num AS active_num, tt1.dev_num AS togame_nu FROM (SELECT t_date,platform,game_id,source,dev_num,type FROM `res_md_device_report` WHERE 1 = 1 AND type = 1 AND data_type = 'open' ORDER BY t_date LIMIT 10) AS bt LEFT JOIN (SELECT * FROM `res_md_device_report` WHERE data_type='active') AS tt1 ON bt.t_date=tt1.t_date AND bt.platform=tt1.platform AND bt.game_id=tt1.game_id AND bt.source=tt1.source AND bt.type=tt1.type LEFT JOIN (SELECT * FROM `res_md_device_report` WHERE data_type='togame') AS tt2 ON bt.t_date=tt2.t_date AND bt.platform=tt2.platform AND bt.game_id=tt2.game_id AND bt.source=tt2.source AND bt.type=tt2.type

还待测试,

子查询测试结果:

 

连接查询结果就不贴了,以我的写法肯定会扫面全表的。200多万行记录。

posted @ 2016-05-05 17:26  sun_2009  阅读(87)  评论(0)    收藏  举报