1

ユーザーの毎日の活動を含む 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です。では、このクエリの実行に時間がかかるのはなぜですか? . これを最適化する方法を誰かが提案できますか?

4

1 に答える 1

0
SELECT  * FROM (
    SELECT
      buildlog.id,
      reports.label
    FROM
      buildlog
    JOIN
      reports
    ON
      reports.id = buildlog.id
) AS myval_new
ORDER BY id DESC limit 10

おそらく、結合を行う前に順序付けを行うことを選択しているため、速度が低下します。外側のクエリで order by を実行すると、選択されたアイテムのみが並べ替えられます。

于 2012-10-30T13:44:10.477 に答える