ホームページ >バックエンド開発 >PHPチュートリアル >実行順序選択問題
製品テーブル tp_goods:
mysql> select * from tp_goods; - --------+--------------+--------+
商品名 | 市場価格 | -+----------------------+-------------+----------- - ----+--------+ 1 | スマートフォン t1 ホワイト エディション 1998.00 | 2 |条件 | 29.80 |
4 | 2998.00 | OSA レディース ダウンジャケット | 1510.00 | +- ------------------------+---------------+---------- ------ -+--------+
オンライン情報によると
mysql> select cat_id,goods_name,goods_price from tp_goods where cat_id=1; まず from 操作を実行して仮想テーブルを取得します。 VT1 ??> 次に、 where 操作を実行し、cat_id=1 の行をすべて除外し、仮想テーブル VT2 を取得します。このときの列は tp_goods テーブルのすべての列ですか??> 最後に、このときの列は cat_id、goods_name、goods_price の列になります。
----------------------------------------------- - ------------
mysql> select cat_id,max(goods_price) as max_price from tp_goods group by cat_id
質問:
1. このステートメントまた、どのように実行されますか? group by 関数と max 関数は同時に実行されますか?
2. group by と select を最初に実行するのは誰ですか?
ディスカッションへの返信 (解決策)
1.group by ?First
where > group by > 1.groupby ?First
2.group by ? まず
where > group by > select あなたが理解している実行順序は間違っています。少なくともそれは非科学的です
tp_goods に 10000000 件のレコードがあり、cat_id=1 に一致するレコードが 1 つだけある場合
その場合、tp_goods を VT1 にコピーする最初のステップは、多くの時間とスペースを無駄にします?
仮想テーブル VT を作成します (cat_id、goods_name、goods_price の 3 列のみ)
tp_goods を走査し、cat_id=1 に一致するレコードを VT に追加します
VT の内容を出力します
select cat_id,max(goods_price) についてcat_id による tp_goods グループの max_price として
あなたが理解している実行順序は間違っています。少なくともそれは非科学的です
tp_goods に 10000000 件のレコードがあり、cat_id=1 に一致するレコードが 1 つだけある場合
その場合、tp_goods を VT1 にコピーする最初のステップは、多くの時間とスペースを無駄にします?
したがって、次のようになります:
仮想テーブル VT を作成します (cat_id、goods_name、goods_price の 3 列のみ)
tp_goods を走査し、cat_id=1 に一致するレコードを VT に追加します
VT の内容を出力します
select cat_id,max(goods_price) についてcat_id による tp_goods グループの max_price として
実行プロセスは次のようになります:
仮想テーブル VT を作成します (cat_id、max_price の 2 つの列のみ、cat_id をクラスタリングとして、max_price を計算として識別します)
tp_goods を走査し、レコードを VT に追加します。メソッドは次のとおりです。 tp_goods.cat_id の値は VT.cat_id にすでに存在します。次に、対応する max_price を max(goods_price,max_price) に変更します。それ以外の場合は、 を追加します
VT の内容を出力します
本は間違いなくあり、推定されています1990年代のものになります。でも、私は見ていません(見せても必ず見るとは限りません)
プロセスによれば、php の連想配列を使って簡単にプロセスをシミュレートできます
mysql の開発者は、あなたが理解できるほど愚かではありませんその過程を追った本があるはずだと聞いたのですが、それは1990年代のものに違いありません。でも、私は見ていません(見せても必ず見るとは限りません)
プロセスによれば、php の連想配列を使って簡単にプロセスをシミュレートできます
mysql の開発者は、あなたが理解できるほど愚かではありませんプロセスをシミュレートするにはどうすればよいですか?
それで、mysql 開発者がプログラム内でどのように動作するのか知りたいです
モデレーターによると、生成される仮想テーブルは 1 つだけですか?ステートメントに複数の選択がある場合、複数の仮想テーブルが存在しますか? 例:
特に「High-Performance MySQL」(第 2 版) を確認しましたが、投稿者が言及したクエリ シーケンスに関する関連する説明は見つかりませんでした。次のスクリーンショットが投稿者の助けになれば幸いです。