ホームページ >バックエンド開発 >PHPチュートリアル >二分法に基づく PHP 携帯電話番号属性クエリと従来のクエリの効率の比較_PHP チュートリアル
二分法と従来のクエリに基づいた PHP の携帯電話番号属性クエリの効率を比較してみましょう。この記事が、高いパフォーマンスを必要とする友人にとって良い参考値となることを願っています。アルゴリズムがシステムに与える影響を考慮して、実際の運用環境でシステム効率に対するアルゴリズムの影響を実験的に研究することにしました。この二分法で最も重要なことは、順序付けされたデータのクエリと配置です。たとえば、携帯電話番号は順序付けされたデータの非常に適切な例です。
データ量が非常に少ない場合、たとえば、順序付けされたデータが 10 個しかなく、9 番目のデータをクエリするには、ポーリング クエリは結果を決定するために 9 回クエリを実行する必要があり、バイナリ クエリの数は次のようになります。 3 回 (それぞれ 5 番目、8 番目、9 番目のデータと一致する) レコード) を実行して結果を決定します。データ量が大きくなると、二分法によってもたらされる効率はプロセス 2 の階乗増加となり、サーバーの動作効率が大幅に向上し、ユーザーの待ち時間が増加し、サーバー リソースが節約されます。
実験環境:LAMP
実験データ: 国内の携帯電話番号の位置。携帯電話番号の上7桁が部分番号で、130万~159万までのすべての部分番号が昇順に約30万個のデータが生成されます。
従来のクエリ: 携帯電話番号の最初の 7 桁をインターセプトし、データベースの最初のレコードから開始して下方向にループし、比較すると、クエリ結果が返されます。
コードをコピー | |
$note = fread($fp,filesize('./data.php')) //データを読み取ります fclose($fp); $note =explode("n",$note); array_pop($note); array_shift($note); $num = count($note); $_data = ''; //ループクエリの開始 for($i=1;$i $row =explode(" ",$note[$i]); if($m == $row[0]){ $_data = $row; 休憩; } } |
生体認証クエリ: 携帯電話番号の最初の 7 桁を傍受します。まず、データベース内の中央の 100,000 番目のデータを照合します。二分法の原則に従って、照合結果が中央の値より大きい場合は、100,000 から 200,000 までの中央の値に一致する 150,000 番目のデータを再選択します。 。最後の正しい値が見つかって結果が返されるまで、同様に繰り返されます。この場合、毎回のクエリ数は 17 回以下になります。
コードをコピー | |
群れ($fp,LOCK_SH);
$note = fread($fp,filesize('./data.php')) //データを読み取ります |
結論: この実験は、二分法データクエリの効率が従来の効率よりも 10 倍以上高速であることを示しています。この実験では 30 万件のデータしかありませんが、通常の適用データをクエリする場合、データ量が多ければ多いほど、二分法の優位性が示されます (理論的には、数千万のデータを正確にクエリできるのは 1 つだけです)。 30 回)、大量のデータを処理する場合、クエリの効率により直感的な応答が得られる可能性があります。 。