-1

個別の employee_ID と Salary を持つ 100 個のテーブルを含むデータベースがあります。データベースの合計行数は 1 億 (100 テーブルのすべての行の合計) です。テーブルの行数が等しくありません。100 個のテーブルが地域に応じているとしましょう。すべてのテーブルから給与の上位 10% を返したいと考えています。どうすればそれができますか?

4

1 に答える 1

4

まず、一般に、同じ形式のテーブルが複数あるということは、データベース設計が不適切であることを示しています。すべての行を含む 1 つのテーブルを用意することをお勧めします。

次に、100 のテーブルが、MySQL クエリが処理できる限界に達し始めています。以下は、すべてのデータを並べ替える必要があるため、優れたパフォーマンスは得られませんが、機能するはずです。

select es.*
from (select es.*, (@rn := @rn + 1) as rn
      from ((select employee_id, salary from table001) union all
            . . .
            (select employee_id, salary, from table100)
           ) es cross join
           (select @rn := 0) vars
      order by salary desc
     ) t
where rn <= @rn * 0.1;

これは、サブクエリが行を列挙した後、変数@rnに行の総数が含まれるために機能します。これは最終フィルターに使用できます。

于 2014-07-30T11:29:54.060 に答える