0

「役立つヒント」データベース テーブル クエリから返されたレコードのスニペットを表示する jquery ローラー/スクローラーがあります。スクローラーを約 15 レコードに維持したいのですが、常に最初の 15 レコードであるとは限りません。

次のようなクエリを作成する方が効率的ですか。

SELECT *
FROM table
ORDER BY RAND()
LIMIT n

ランダムな結果を返すのはどちらですか?それともクエリ全体を返し、ColdFusion コンポーネントにクエリ結果の乱数を提供させるのですか?

私のスクローラーの将来には、'Items for Sale' テーブルからのランダムなレコードも含まれるので、それを心に留めておく必要があります。

4

3 に答える 3

4

Coldfusion に使用されない値の大きな結果セットを返すことは、決して取り戻せないリソースの浪費であるという bemace に同意します。

ただし、順序付けに MySQL の RAND() 関数を使用する場合は注意してください。レコードが 100,000 を超えると、うまくスケーリングできなくなり(グラフを参照)、代替手段の使用を検討する必要があります。

于 2010-10-25T16:24:32.370 に答える
1

比較的小規模で静的なクエリをキャッシュしている場合を除き、通常はデータベース側でレコードをランダム化する方が効率的です。そうすれば、テーブル内のすべてのレコードではなく、毎回 15 レコードのみを取得できます。

于 2010-10-25T16:24:01.590 に答える
1

結果セット全体を返し、それらのほとんどを捨てることは、間違いなく効率的ではありません。

他のテーブルからのデータを含めるポイントに到達したら、取得したクエリと同様の別のクエリを実行し、ColdFusion で結果をシャッフルできます。

完全を期すために、次のようなことが可能ですが、遅すぎて実用的ではありません。

( SELECT * FROM table1 )
UNION
( SELECT * FROM table2 )
ORDER BY RAND()
LIMIT 30 
于 2010-10-25T16:21:55.080 に答える