sql >> データベース >  >> RDS >> Mysql

MySqlクエリの最適化:注文時に遅すぎる

    Order Byを配置する代わりに メインクエリに、次のようにラップします:

    SELECT * FROM (   
      ... your query
    ) ORDER BY `created at`
    

    クエリプランを見てください。あなたの場合、ソートはテーブルmtrt_itemsで実行されることがわかります。 外部結合が実行される前。私が部分的に提供した書き直しでは、ソートは外部結合の後に適用され、はるかに小さいセットに適用されます。

    更新

    LIMITが大きなセット(500,000?)に適用されていると仮定すると、結合を行う前にトップを実行できるように見えます。

    SELECT * from (
        SELECT 
        `id`, ... `created_at`, ...
        ORDER BY `i`.`created_at` DESC 
        LIMIT 100 OFFSET 0) as i
    
        LEFT JOIN `mtrt_users` AS `u` ON i.user_id =u.id
    
        LEFT JOIN `twt_tweets_content` AS `t` ON t.id =i.id
        LEFT JOIN `twt_users` AS `tu` ON t.user_id = tu.id
    
        INNER JOIN `mtrt_items_searches` AS `r` ON i.id =r.item_id
        INNER JOIN `mtrt_searches` AS `s` ON s.id =r.search_id
        INNER JOIN `mtrt_searches_groups` AS `sg` ON sg.search_id =s.id
        INNER JOIN `mtrt_search_groups` AS `g` ON sg.group_id =g.id
        INNER JOIN `account_clients` AS `c` ON g.client_id =c.id                
    
    GROUP BY i.id
    


    1. 忙しいデータの人々のための7つの無料のデータベース作図ツール

    2. Hibernateが2つのテーブルに参加し、春の安らかなWebサービスでjson応答を生成しますか?

    3. MySQL:日付範囲の間に欠落している日付を見つける

    4. SQL Server(T-SQL)でのCHARINDEX()関数のしくみ