sql >> データベース >  >> RDS >> Mysql

良いアイデア/悪いアイデア?サブクエリ結果の小さなセットの外でMySQLRAND()を使用しますか?

    実は...私はテストを実行することになり、自分の質問に答えたかもしれません。他の人に役立つ場合に備えて、この情報をここに投稿すると思いました。 (ここで何か間違ったことをした場合は、お知らせください!)

    これはちょっと驚くべきことです...

    私が読んだすべてとは反対に、100万行のTestDataというテーブルを作成し、次のクエリを実行しました。

    SELECT * FROM TestData WHERE number =41 ORDER BY RAND()LIMIT 8

    ...そして平均0.0070秒で行を返しました。 RAND()の評判が悪い理由はよくわかりません。少なくともこの特定の状況では、私にはかなり使いやすいようです。

    テーブルに3つの列があります:

    id [BIGINT(20)] | textfield [tinytext] |番号[BIGINT(20)]

    IDの主キー、番号のインデックス。

    MySQLは、「WHERE number =41」によって返される20行にのみRAND()を適用する必要があることを知っているほど賢いと思いますか? (具体的には、「number」の値が41の20行のみを追加しました。)

    代替サブクエリメソッドは、平均時間が約.0080秒の結果を返します。これは、非サブクエリメソッドよりも低速です。

    サブクエリメソッド:SELECT * FROM(SELECT * FROM TestData WHERE number =41)as t ORDER BY RAND()LIMIT 8



    1. UPDATEデータベースクエリを使用したSQL構文エラー

    2. デフォルト値で新しいSQL列を追加する

    3. リモートサーバーにアクセスするときのMySQL接続のエラー

    4. 返される列の数が動的である場合にMySQLクエリの列をカウントするにはどうすればよいですか?