1

ブログ投稿を表示する Web サイトがあるとします。この Web ページにはコメント セクションがありますが、ページの読み込み時に非表示になっています。ただし、コメント数はその場所に表示され、ユーザーがカウントをクリックすると、すべてのコメントをロードするために ajax 呼び出しが行われます。

通常は、ページからコメント数を取得するためのコードを少し追加して、それをバックエンドに送信し、クエリに制限を加えることができます。だからこれの代わりに...

SELECT * FROM comments INNER JOIN post WHERE post.id = 1

私がすることができます...

SELECT * FROM comments INNER JOIN post WHERE post.id = 1 LIMIT 15

これを実装したので、主キーを介して検索して、その主キーにある行数を意図的にクエリに伝えるクエリに利点はありますか? 制限ありと制限なしで SQL EXPLAIN を実行しましたが、それらは同じです。私の主な懸念とこれを尋ねる理由は b/cです。クエリが完全なテーブル スキャンを実行しないようにしたいので、常に制限を追加する習慣がありました。

4

2 に答える 2

5

これは多くのレベルで間違っています。それだけで正常に機能するクエリに、比較的膨大なオーバーヘッドを追加しています(仕上げが必要な場合でも、ビルの回答を参照してください)

適切なクエリ (および適切なモデル) を作成すれば、パフォーマンスの問題は発生しません。このような小さなトリックを試すことで、

1- ある時点でパフォーマンスの問題が発生する ( desc による順序と制限オプティマイザーの問題に関する優れた mysql パフォーマンス ブログの記事を参照)

2- コードでスパゲッティを作成します (コードを読んで最初に疑問に思うのは、「なぜそうなのか?」ということです。また、このようなことが積み重なって、最終的には、これは多くの「ノイズ」になります。メインラインへ、それが私のアドバイスです)

3- 予想外の結果 (2 つのクエリの間に突然 16 番目のコメントが表示されたら?)

それは善意によるものですが、私はそれは悪い考えだと思います。

于 2013-05-05T01:46:44.377 に答える
-6

結合する結果セットの結果セットを制限したい... またLIMIT、レコードが変更されるため、結果セットが何であるかを推測したくありません。結果セットのサブセットを返すにはコストがかかります。

于 2013-05-05T01:47:30.730 に答える