mysqlはランダムにデータを取り、どのように効率を実現しますか?


データベース(mysql)からランダムにいくつかのデータを取得するのは簡単ですが、1つのテーブルのデータの基数が大きい場合、例えば1千万、1千万からランダムに10個のデータを生成すると、かなり遅くなります.同時に100人がウェブサイトにアクセスし、これらのプロセスを処理すると、一般的なサーバにとっては、ハングアップするに違いありません.
mysqlデータベースでランダムデータを取得する関数rand()は、簡単に使わないことをお勧めします.ブログを書くときに試してみましたが、16万データからランダムに5つのデータを取得し、14.02秒で驚くほどかかりました.
SELECT * FROM t_share ORDER BY rand() LIMIT 5;

mysql最大値関数max()、最小値min()によりクエリー消費を低減
mysqlデータの最大値と最小値の取得はほぼ0消費であるため、データベーステーブルデータは自身のプライマリ・キーIDの集合とjoinクエリーを行い、非常に迅速である.さっき私もやってみましたが、16万のデータの基数の下で、ランダムに5つのデータを生成しても時間の消費はほとんど見えません.しかし、このクエリ方法には、生成されたデータIDが連続しているという欠点があり、連続しないようにするには、ループ実行をしなければならない(ループごとにランダムに1つまたは2つのデータがある).
SELECT sh1.* FROM fw_share AS sh1 
JOIN 
(SELECT 
	ROUND(
		RAND() * ((SELECT MAX(share_id) FROM fw_share)-(SELECT MIN(share_id) FROM fw_share)) 
		+ (SELECT MIN(share_id) FROM fw_share)
	) AS share_id
) AS sh2 
WHERE sh1.share_id>=sh2.share_id

実はランダムにデータを生成して、完全に彼に根拠のあるランダムに生成させることができます.これは何と言いますか.例えば、タイトル、ラベル、内容があり、重みの高いキーワードを抽出することができ、文章がない場合はこのように処理し、検索エンジンで並べ替える方法で、同じキーワードの文章を迅速に見つけることができ、これらの文章の中で、ランダムにいくつかのデータを生成すればいい.海で針をすくう仕事を、浴槽で雑物をすくうようになり、広い範囲から、コントロールできる範囲に縮小すると、万事が簡単になります!これも一つの考え方で、良い解決策が見つからないときは、やってみてください.
PHP楽知ブログより提供http://tech.42xiu.com