4

いくつかの基準を満たすデータベーステーブルからx行を取得する必要があります。ORDER BY RAND()を使用してMySQLからランダムな行を取得できることを知っています。

SELECT * FROM 'vids' WHERE 'cat'=n ORDER BY RAND() LIMIT x

同じことを行うための最も最適化された方法を探しています{システムリソースの使用率を低くすることが最優先事項です。次に重要な優先事項は、クエリの速度です}。また、テーブルデザインでは、「猫」をINDEXにする必要がありますか?

4

2 に答える 2

0

私もこれを行う方法を考えようとしています。現時点での私の考えは、次の3つの選択肢です。

1)基準を無視してランダムな行を選択し、アプリケーションレベルで一致しない行を破棄し、必要に応じてさらにランダムな行を選択します。この方法は、基準がテーブル内の多くの行、おそらく20%以上(ベンチマークが必要)と一致する場合に効果的です。

2)基準に従って行を選択し、1からcount(*)までの乱数(アプリケーションで決定された乱数)に基づいて行を選択します。これは、基準に一致するデータが均等に分散されている場合に効果的ですが、たとえば日付範囲を選択している場合はひどく失敗し、乱数の大部分はこの範囲外のレコードに該当します。

3)私の現在のお気に入りだけでなく、ほとんどの仕事。ランダムレコードを選択するために使用する予定の基準のすべての組み合わせについて、その基準の特別なテーブルにレコードを挿入します。次に、特別なテーブルからランダムなレコードを選択し、それらをデータに戻します。たとえば、次のようなテーブルがあるとします。

テーブル猫:名前、年齢、eye_colour、fur_type

茶色の毛皮の猫をランダムに選択できるようにする場合は、次のようなテーブルが必要です。

テーブルcats_with_brown_fur:id(autonumber)、cat_fk

次に、自動番号IDに基づいてこのテーブルからランダムなレコードを選択できます。これにより、高速になり、均等に分散されたランダムな結果が生成されます。ただし、実際、多くの基準セットから選択すると、これらのテーブルを維持するためのオーバーヘッドが発生します。

とにかく、それが私の現在の見方です。幸運を

于 2012-07-24T16:06:57.357 に答える
-3

Rand() による順序は悪い考えです。

より良い解決策は次のとおりです 。MySQL の ORDER BY RAND() 関数を最適化するにはどうすればよいですか?

Google はあなたの友達です。多くの人が Google について、私よりもうまく説明してくれています。
http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/ http://www. phpbuilder.com/board/showthread.php?t=10338930 http://www.paperplanes.de/2008/4/24/mysql_nonos_order_by_rand.html

于 2011-06-16T03:37:53.707 に答える