MySQLはランダムに一定数のレコードを抽出します

MySQLはランダムに一定数のレコードを抽出します

以前は、このような使用シナリオを処理するために rand() で直接 order していましたが、効率があまり良くありませんでした。そこで最近、このシナリオに再び遭遇し、オンラインでより良い解決策を探しました。

1.rand() による順序付け

書き方:

選択
  id
から
  `テーブル`
注文する
  ランド()

この書き方の場合の欠点は、rand 関数が order by で複数回実行されるため、効率に影響が出ることです。

2. max(id) * rand() をjoinを使って実行する

書き方:

選択
  *
から
  `テーブル` AS t1
参加する (
  選択
    ラウンド(
      ランダム()*(
        (SELECT MAX(id) FROM `table`) - (SELECT MIN(id) FROM `table`)
      ) + (`table` から MIN(id) を選択)
    ) AS ID
) t2
どこ
  t1.id >= t2.id
注文する
  t1.id
制限 1;

ネット上の大物たちはみんな2番目の書き方を推奨しているので、記録しておこうと思います。最大IDと最小IDはプログラム内で計算できる気がします。

ここで問題となるのは、複数のレコードを取得する場合、それらは連続している必要があるため、連続したデータを取得したくない場合はループする必要があることです。ただし、このステートメントは非常に効率的なので、ループクエリを実行できます。

上記は関連する知識ポイントです。困っている友人はそこから学ぶことができます。123WORDPRESS.COM を応援していただきありがとうございます。

<<:  動的テーブルを実装するための要素サンプルコード

>>:  vscodeでnpmを使用してbabelをインストールする方法

推薦する

UbuntuからMySQLを削除して再インストールする方法

まずmysqlを削除します: sudo apt-get remove mysql-*残ったデータをク...

React のクラスからフックへの移行

目次リアクトフック序文なぜフックなのか?クラス関数クラスとフックの比較フックはコンポーネントの状態を...

MySQL スロークエリログの詳細な理解

目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...

Zabbix による VMware Exsi ホストの監視のグラフィカルな手順

1. 仮想化 vcenter に入り、ブラウザでログインし (クライアントは設定する場所を見つけませ...

共通要素のデフォルトのマージンとパディング値に関する議論

今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...

Dockerイメージの階層化の原理の詳細な説明

ベースイメージベースイメージには 2 つの意味があります。他のイメージに依存せず、ゼロから構築します...

Linuxはiftopを使用してネットワークカードのトラフィックをリアルタイムで監視します

Linux は iftop を使用してネットワーク カードのトラフィックをリアルタイムで監視します。...

this.parentNode.parentNode (親ノードの親ノード) はどういう意味ですか?

親ノードの親ノード、例えば、このような段落がありますHTML:コードをコピーコードは次のとおりです。...

Vue の新しいパートナー TypeScript クイックスタート実践記録

目次1. 公式の足場を使って構築する2. プロジェクトディレクトリ分析3. TypeScript の...

vue の v-bind を理解する

目次1. v-bindの主要ソースコードの分析1. v-bind属性はどこに均一に保存されるか: a...

MySQLデータベース操作の基本コマンド

1. データベースを作成します。 データ data _name を作成します。 PHP でデータベー...

Reactにおけるコンポーネント通信の詳細な説明

目次親コンポーネントは子コンポーネントと通信します子コンポーネントは親コンポーネントと通信しますコン...

Vue2.x - アンチシェイクとスロットリングの使用例

目次ユーティリティ: vue での使用:説明する:画像安定化:スロットル:ユーティリティ: // 手...

Apache での ab パフォーマンス テスト結果を分析する

私はパフォーマンス テストを行うために常に Loadrunner を使用してきました。 Loadru...

nestjs からフロントエンドに返されるデータ形式のカプセル化実装

通常、開発プロセスでは、インターフェイス要求の成功または失敗は httpcode に基づいて決定され...