48

Select tables optimized awayMySQL Explain プラン の意味は何ですか?

explain select count(comment_count) from wp_posts;

+----+-------------+---------------------------+-----------------------------+
| id | select_type | table,type,possible_keys, | Extra                       |
|    |             | key,key_len,ref,rows      |                             |
+----+-------------+---------------------------+-----------------------------+
| 1  | SIMPLE      | all NULLs                 | Select tables optimized away| 
+----+-------------+---------------------------+-----------------------------+
1 row in set (0.00 sec)

注:explain plan出力は読みやすくするために編集されています。

4

7 に答える 7

49

MySQL のドキュメントから:

クエリには、すべてインデックスを使用して解決された集計関数 (MIN()、MAX())、または MyISAM の場合は COUNT(*) のみが含まれ、GROUP BY 句は含まれていませんでした。オプティマイザは、1 行だけを返す必要があると判断しました。

基本的にこれは、クエリが MySQL で直接利用できるデータを使用し、クエリが一定時間で実行されることを意味します。

于 2011-09-30T00:39:50.903 に答える
29

これは、テーブル内の行数をカウントするだけのクエリを実行したことを意味し、そのテーブルは MyISAM テーブルです。MyISAM テーブルは個別の行数で保存されるため、このクエリを実行するために MySQL はテーブルの行データをまったく確認する必要がありません。代わりに、事前に計算された行数をすぐに返します。したがって、テーブルへのアクセスは「最適化されて」おり、クエリは非常に高速です。

同じことは、InnoDB などの MySQL の他のストレージ エンジンでは発生しません。しかし、実際には、他のさまざまな理由から、ほとんどの場合、MyISAM ではなく InnoDB を使用したいと考えています。(そして、行数の最適化がなくても、この種のクエリは非常に高速です。)

select count(comment_count) from wp_posts;

それはあなたが本当にやりたかったことですか?それは just と同じです( can't beであるとSELECT COUNT(*)...仮定します。の合計が必要な場合は、 を使用する必要があり、「最適化された離れた」動作は得られません。comment_countNULLcomment_countSUM(comment_count)

于 2010-01-02T19:34:47.887 に答える
9

これは、テーブルがクエリから完全に最適化されていることを意味します。あなたはそれよりも良くなることはできません。

于 2010-01-02T18:24:38.963 に答える
0

クエリを見ずに言うのは難しいですが、たとえば定数値を選択した場合、これは結果になります-

テーブルから 1 を選択

または、質問に答えるのに 1 つ以上のテーブルが必要ありません。

于 2010-01-02T18:21:20.673 に答える
0

テーブルがクエリから完全に最適化されているとは確信していません。このクエリは「wm.task_inst_params から table_name、count(id) として 'wm.task_inst_params' を選択します。」実行に 18 分かかります。テーブルには 224788138 行あります。

そして、なぜそんなに時間がかかるのかを確認するために実行計画を取得しようとすると、「計画を説明できません: 最適化されたテーブルを選択してください」というメッセージが表示されます。

innodb_バージョン 8.0.11

于 2021-01-10T17:13:39.587 に答える