ホームページ データベース mysql チュートリアル MySQL查询随机数据的4种方法和性能对比_MySQL

MySQL查询随机数据的4种方法和性能对比_MySQL

Jun 01, 2016 pm 01:17 PM
長所と短所

下面从以下四种方案分析各自的优缺点。
方案一:
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
这种方法的问题就是非常慢。原因是因为MySQL会创建一张零时表来保存所有的结果集,然后给每个结果一个随机索引,然后再排序并返回。
有几个方法可以让它快起来。
基本思想就是先获取一个随机数,然后使用这个随机数来获取指定的行。
由于所有的行都有一个唯一的id,我们将只取最小和最大id之间的随机数,然后获取id为这个数行。为了让这个方法当id不连续时也能有效,我们在最终的查询里使用”>=”代替”=”。
为了获取整张表的最小和最大id,我们使用MAX()和MIN()两个聚合函数。这两个方法会返回指定组里的最大和最小值。在这里这个组就是我们表里的所有id字段值。
方案二:
$range_result = mysql_query( " SELECT MAX(`id`) AS max_id , MIN(`id`) AS min_id FROM `table` ");
$range_row = mysql_fetch_object( $range_result );
$random = mt_rand( $range_row->min_id , $range_row->max_id );
$result = mysql_query( " SELECT * FROM `table` WHERE `id` >= $random LIMIT 0,1 ");
就像我们刚才提到的,这个方法会用唯一的id值限制表的每一行。那么,如果不是这样情况怎么办?
下面这个方案是使用了MySQL的LIMIT子句。LIMIT接收两个参数值。第一个参数指定了返回结果第一行的偏移量,第二个参数指定了返回结果的最大行数。偏移量指定第一行是0而不是1。
为了计算第一行的偏移量,我们使用MySQL的RAND()方法从0到1之间生成一个随机数。然后我们把这个数字跟我们用COUNT()方法获取倒的表记录数相乘。由于LIMIT的参数必须是int型而不能是float,我们使用FLOOR()来处理结果。FLOOR()会计算小于表达式的最大值。最终的代码就是这样:
方案三:
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` ");
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$result = mysql_query( " SELECT * FROM `table` LIMIT $offset, 1 " );
在MySQL 4.1以后我们可以使用子子查询合并上面两个方法:
方案四:
SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;
这个方案跟方案二有同样的弱点,只对有唯一id值的表有效。
记住我们最初寻找选择随机行的替代方法的原因,速度!所以,这些方案的在执行时间上的比较会怎么样?我不会指出硬件和软件配置或者给出具体的数字。大概的结果是这样的:
最慢的是解决方案一(我们假定它用了100%的时间)。
方案二用了79%
方案三

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

システム購入前に必ずお読みください: Win11 と Win10 の長所と短所の分析 システム購入前に必ずお読みください: Win11 と Win10 の長所と短所の分析 Mar 28, 2024 pm 01:33 PM

情報化社会の今日、パソコンは私たちの生活に欠かせないツールとして重要な役割を果たしています。オペレーティング システムはコンピュータの中核ソフトウェアの 1 つであり、私たちの使用体験や作業効率に影響を与えます。市場では、Microsoft の Windows オペレーティング システムが常に支配的な地位を占めており、現在、人々は最新の Windows 11 と古い Windows 10 の選択に直面しています。一般の消費者は、オペレーティング システムを選択するときに、バージョン番号だけではなく、その長所と短所も理解します。

テンプレートのメリットとデメリットは何ですか? テンプレートのメリットとデメリットは何ですか? May 08, 2024 pm 03:51 PM

テンプレート化: 長所と短所 テンプレート化は、再利用可能なコード ブロックを作成できる強力なプログラミング手法です。これにはさまざまな利点がありますが、いくつかの欠点もあります。長所: コードの再利用性: テンプレートを使用すると、アプリケーション全体で再利用できる共通のコードを作成できるため、重複やメンテナンスの労力が軽減されます。一貫性: テンプレート化により、コード スニペットが異なる場所でも同じ方法で実装されるようになり、コードの一貫性と読みやすさが向上します。保守性: テンプレートへの変更は、それを使用するすべてのコードに同時に反映されるため、保守と更新が簡素化されます。効率: テンプレートを作成すると、同じコードを何度も記述する必要がないため、時間と労力が節約されます。柔軟性: テンプレートを使用すると、さまざまなアプリケーションのニーズに簡単に適応できる構成可能なコード ブロックを作成できます。欠点がある

Java サーブレットの仕組みの長所と短所は何ですか? Java サーブレットの仕組みの長所と短所は何ですか? Apr 16, 2024 pm 03:18 PM

JavaServlet は、動的 Web ページの構築に使用される Java クラスで、クライアントとサーバー間のブリッジとして機能します。動作原理: リクエストの受信、サーブレットの初期化、リクエストの処理、応答の生成、サーブレットの終了。長所: ポータブル、拡張性があり、安全で使いやすい。短所: オーバーヘッド、結合、および状態管理。実際のケース: 「Hello, Servlet!」メッセージを表示する単純なサーブレットを作成します。

Java 変数に名前を付けるときに中国語を使用する場合の利点と欠点 Java 変数に名前を付けるときに中国語を使用する場合の利点と欠点 Feb 18, 2024 am 10:14 AM

Java 変数の名前付けに中国語を使用する利点と欠点 Java プログラミングでは、通常、変数、メソッド、クラスなどの識別子の名前に英語を使用します。ただし、場合によっては、識別子の一部として中国語を使用することも検討できます。この記事では、中国語の名前付き Java 変数を使用する利点と欠点を検討し、いくつかの具体的なコード例を示します。利点 1: コードの可読性の向上: 中国語の名前付き Java 変数を使用すると、コードが理解しやすくなり、読みやすくなります。結局のところ、私たちの脳は英語よりも中国語をより自然かつ流暢に理解し、認識します。英語以外の場合

PHP フレームワークの長所と短所の比較: どちらが優れていますか? PHP フレームワークの長所と短所の比較: どちらが優れていますか? Jun 04, 2024 pm 03:36 PM

PHP フレームワークの選択は、プロジェクトのニーズと開発者のスキルによって異なります。 Laravel: 豊富な機能と活発なコミュニティがありますが、学習曲線が急で、パフォーマンスのオーバーヘッドが高くなります。 CodeIgniter: 軽量で拡張が簡単ですが、機能が制限されており、ドキュメントが少なくなります。 Symfony: モジュール式の強力なコミュニティですが、複雑なパフォーマンスの問題があります。 ZendFramework: エンタープライズ グレードで、安定性と信頼性が高くなりますが、ライセンスが大きく高価です。スリム: マイクロフレームワークで高速ですが、機能が限られており、学習曲線が急です。

Golang コンパイラの概要: さまざまなコンパイラの長所と短所を探る Golang コンパイラの概要: さまざまなコンパイラの長所と短所を探る Jan 19, 2024 am 10:44 AM

Golang の発展に伴い、より多くのコンパイラが開発されました。コンパイラを選択するとき、開発者は信頼性、パフォーマンス、使いやすさなどの多くの要素を考慮する必要があります。この記事では、開発者が自分に合ったコンパイラをより適切に選択できるように、いくつかの一般的な Golang コンパイラを要約し、その長所と短所を検討します。 Go 公式コンパイラー Go 公式コンパイラーは Golang のデフォルトのコンパイラーであり、Golang コミュニティーで広く認識されているコンパイラーです。これには次の利点があります: 優れた安定性、小さいサイズ、コンパイル

ソリッド ステート ドライブとメカニカル ハード ドライブの比較 ソリッド ステート ドライブとメカニカル ハード ドライブの比較 Feb 26, 2024 pm 06:21 PM

ソリッド ステート ドライブとメカニカル ハード ドライブの長所と短所 近年、ソリッド ステート ドライブ (SSD) が徐々に世間に知られるようになり、パーソナル コンピュータ、サーバーなどの分野で広く使用されています。比較すると、従来のストレージ デバイスであるメカニカル ハードディスク (HDD) にも、信頼性とコスト効率の点で利点があります。この記事では、読者がニーズに合ったストレージ デバイスをより適切に選択できるように、ソリッド ステート ドライブとメカニカル ハード ドライブの長所と短所を比較分析します。まず、ソリッド ステート ドライブには、読み取りおよび書き込み速度の点で明らかな利点があります。 SSDはフラッシュストレージメディアを使用しているため、読み取りと書き込みの速度が高速です。

C言語とPython:適用可能なシナリオとメリットとデメリットの分析 C言語とPython:適用可能なシナリオとメリットとデメリットの分析 Mar 22, 2024 am 11:24 AM

C 言語と Python: 適用可能なシナリオと長所と短所の分析 コンピューター プログラミングの分野では、C 言語と Python は非常に人気のある 2 つのプログラミング言語ですが、それぞれに独自の長所と短所があり、さまざまなシナリオに適しています。この記事では、C 言語と Python を詳細に分析し、適用可能なシナリオ、利点と欠点について説明します。 1. C 言語の適用シナリオ: C 言語は、高効率で優れたパフォーマンスを備えたプロセス指向のプログラミング言語であり、高度な制御と効率が要求されるシステム ソフトウェア、ドライバー、組み込みシステムの開発に適しています。

See all articles