SQL最適化(一)

2038 ワード

SQL最適化
まずは索引から工夫します。
sqlの前に「explanin」をつけて性能を調べたらどうですか?
インデックスが使用されているかどうかを確認します。
show index from tableName 
索引を追加
ALTER TABLE tableName ADD INDEX (   );
インデックスを削除
DROP INDEX    (key_name) ON tableName 
sql文から最適化
  • は、left join、inner joinまたはexistsを利用したほうがいいです。INで検索するのは遅いです。
  • .existsがinより効率が高いという説は不正確である。
  • クエリの2つのテーブルのサイズが同じであれば、inとexistsでの違いは大きくない。
  • もし二つのテーブルの中の一つが小さいなら、一つは大きいテーブルで、サブクエリーテーブルの大きいのはexistsを使い、サブクエリーテーブルの小さいのはin:
  • を使います。
    inner join(left/right)
    SELECT
        t.t_advert_id,
        IFNULL( sum( t.success_target_account ), 0 ) AS account_num,
        IFNULL( sum( t.success_target_group ), 0 ) AS group_num 
    FROM
        t_task_detail t
        INNER JOIN t_device d ON d.device_id = t.device_id
        INNER JOIN r_device_device_tag tag ON tag.t_device_id = d.t_device_id 
    WHERE
        1 = 1 
        AND tag.t_device_tag_id = 9 
    GROUP BY
        t.t_advert_id
    exists
    SELECT
        t.t_advert_id,
        IFNULL( sum( t.success_target_account ), 0 ) AS account_num,
        IFNULL( sum( t.success_target_group ), 0 ) AS group_num 
    FROM
        t_task_detail t 
    WHERE
        1 = 1 
        AND EXISTS (SELECT d.device_id FROM t_device_tag dt
        INNER JOIN r_device_device_tag ddt ON ddt.t_device_tag_id = dt.t_device_tag_id
        INNER JOIN t_device d ON d.t_device_id = ddt.t_device_id WHERE dt.t_device_tag_id =9 
        AND t.device_id = d.device_id ) 
    GROUP BY
        t.t_advert_id
    in
    SELECT
        t.t_advert_id,
        IFNULL( sum( t.success_target_account ), 0 ) AS account_num,
        IFNULL( sum( t.success_target_group ), 0 ) AS group_num 
    FROM
        t_task_detail t 
    WHERE
        1 = 1 
        AND t.device_id IN (SELECT d.device_id FROM t_device_tag dt
        INNER JOIN r_device_device_tag ddt ON ddt.t_device_tag_id = dt.t_device_tag_id
        INNER JOIN t_device d ON d.t_device_id = ddt.t_device_id 
        WHERE dt.t_device_tag_id = 9 ) 
    GROUP BY
        t.t_advert_id
    転載先:https://www.cnblogs.com/chenshuquan/p/11378277.html