質問編集履歴

2 追記事項の調整

atLast

atLast score 12

2017/01/28 16:03  投稿

SQLで約10万件のデータが入っているテーブルのjoinについて
現在、テーブル8個に分割したデータを一つにまとめようとしています。
各テーブルは、約10万件のデータが入っています。
このデータをプライマリキーでjoinして取得しようとして、下記のクエリを書きました。
```SQL
SELECT
   *
FROM
   input_irou1 AS ir1
JOIN input_ir2 AS ir2 ON ir1.count = ir2.count
JOIN input_ir3 AS ir3 ON ir1.count = ir3.count
JOIN input_ir4 AS ir4 ON ir1.count = ir4.count
JOIN input_ir5 AS ir5 ON ir1.count = ir5.count
JOIN input_ir6 AS ir6 ON ir1.count = ir6.count
JOIN input_ir7 AS ir7 ON ir1.count = ir7.count
JOIN input_ir8 AS ir8 ON ir1.count = ir8.count
ORDER BY
   ir1.count DESC
LIMIT 10
```
上記クエリでjoinできるのはわかるんですが、explainをかけると
いずれかのテーブルで、using temporaryとusing filesortが出現してしまいます。
各テーブルのcountにはprimaryがついています。
using temporary, using filesortを出さずにjoinする方法はないでしょうか。
速度が非常に遅く、困っております。
宜しくお願いいたします。
---
170128更新
テーブル構造は以下の形です。
(input_irou1の例ですが、2~8もほぼ同様です)
![テーブル定義](0d5d3cc87fc1048904622679f6971939.png)
![テーブル定義](0d5d3cc87fc1048904622679f6971939.png)
※1全テーブルでインデックス定義はありません
※2鍵マークはprimaryの定義のいみです。
  • MySQL

    7952 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • SQL

    3475 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1 テーブル定義の追加

atLast

atLast score 12

2017/01/28 14:57  投稿

SQLで約10万件のデータが入っているテーブルのjoinについて
現在、テーブル8個に分割したデータを一つにまとめようとしています。
各テーブルは、約10万件のデータが入っています。
このデータをプライマリキーでjoinして取得しようとして、下記のクエリを書きました。
```SQL
SELECT
   *
FROM
   input_irou1 AS ir1
JOIN input_ir2 AS ir2 ON ir1.count = ir2.count
JOIN input_ir3 AS ir3 ON ir1.count = ir3.count
JOIN input_ir4 AS ir4 ON ir1.count = ir4.count
JOIN input_ir5 AS ir5 ON ir1.count = ir5.count
JOIN input_ir6 AS ir6 ON ir1.count = ir6.count
JOIN input_ir7 AS ir7 ON ir1.count = ir7.count
JOIN input_ir8 AS ir8 ON ir1.count = ir8.count
ORDER BY
   ir1.count DESC
LIMIT 10
```
上記クエリでjoinできるのはわかるんですが、explainをかけると
いずれかのテーブルで、using temporaryとusing filesortが出現してしまいます。
各テーブルのcountにはprimaryがついています。
using temporary, using filesortを出さずにjoinする方法はないでしょうか。
速度が非常に遅く、困っております。
宜しくお願いいたします。
宜しくお願いいたします。
---
170128更新
テーブル構造は以下の形です。
(input_irou1の例ですが、2~8もほぼ同様です)
![テーブル定義](0d5d3cc87fc1048904622679f6971939.png)
  • MySQL

    7952 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • SQL

    3475 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る