ユーザーの毎日の活動を含む 2 つのテーブルがあります。これらのテーブルに 2 つ参加させ、このテーブルから上位 10 個の ID を選択します。
表 1 :ビルドログ
+----------------+------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------+------+-----+---------+----------------+
| NAME | varchar(50) | YES | | NULL | |
| ID | int(11) | NO | PRI | NULL | auto_increment |
| DATE_AND_TIME | datetime | YES | | NULL | |
| COMMENT | mediumtext | YES | | NULL | |
+----------------+------------------------+------+-----+---------+----------------+
行数: 276186
表 2 :レポート
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| r_id | int(10) | NO | PRI | NULL | auto_increment |
| id | int(15) | YES | UNI | NULL | |
| label | varchar(200) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
行数: 134058
この2つのテーブルで結合クエリのみを使用している場合、それを使用id
すると非常に速くなります。
クエリ 1 :
select buildlog.id,reports.label from buildlog join reports on reports.id = buildlog.id limit 10\G
クエリ時間: セットで 10 行 (0.01 秒)
order by を追加して最新の 10 個のビルド ID を取得する場合、実行に 1 ~ 2 分かかるというラベルを付けます。
クエリ 2 :
select buildlog.id,reports.label from buildlog join reports on reports.id = buildlog.id order by buildlog.id desc limit 10\G
クエリ時間:10 rows in set (0.98 sec)
order by column は主キーbuildlog.id
です。では、このクエリの実行に時間がかかるのはなぜですか? . これを最適化する方法を誰かが提案できますか?