2

mysql では、3 つのテーブル (膨大な量のデータ) が JOIN 句で結合されている場合、SELECT の最後に LIMIT 句があり、SQL エンジンはテーブルのデカルト積を作成し、その後 LIMIT を適用するか、存在します以前に行われた最適化?

大きなデータ ボリュームを使用している場合、JOIN 操作はコストのかかる操作であるため、質問しています。

この場合、JOIN を実行してすべてのデータをプルするか、または LIMIT 句を指定して SELECT を N 回実行する方がよいでしょうか?

4

2 に答える 2

1

短いバージョン:クエリによって異なります

長いバージョン:LIMIT句がある場合、データが何らかの方法で順序付けられていることを前提としています。ORDER BY句を明示的に指定しない場合、MySQLが必要な行数を検出する限り、クエリの実行が停止することがわかります。ファイルソートが必要な注文がある場合、すべてのデータは一時テーブルでソートされ、MySQLは指定した最初のN行を出力します。

ただし、特定の結合順序とインデックスの使用を強制した場合、MySQLは幸いにも実行を短くします。

于 2012-05-22T23:02:27.653 に答える
0

いいえ、制限機能は視覚的なアフター エフェクトにすぎません。

1/ JOINS が計算されます。

2/ WHERE フィルターと HAVING フィルターが処理されます

3/ LIMIT は、返される結果の数を減らします。ORDER BY 句を指定した場合、順序は保持されます。

結合を改善して計算オーバーヘッドを改善します。

于 2012-05-22T22:51:14.963 に答える