0

私は自分のサイトで大きな問題を抱えています。データベースからすべてのカテゴリを取得するこの機能があります:-

public function selectallcatdata()
{
    $query = mysql_query("select Category_name,Category_id from category where Category_delete='0'");
    return $query;
    mysql_free_result($query);
}

そして、私はこのような選択タイプでこの関数を使用します:-

<select name="txtCompanyCat" id="txtCompanyCat">
<option selected value="">choose the Category ... </option>
<?php 
$CategoryNameData = $select -> selectallcatdata();
while($CatNameRow = mysql_fetch_array($CategoryNameData)){
    $CatID = $CatNameRow['Category_id'];
    $CatName = $CatNameRow['Category_name'];
?>
<option value="<?php echo $CatID; ?>"><?php echo $CatName; ?></option>
<?php } 
unset($CatID);
unset($CatName);
?>
</select>

したがって、問題は、このテーブルに 251932 行あり、テーブルからこのすべての行を表示する必要があることです。この負荷をどのように解決できますか。

4

4 に答える 4

3

251,932 個のアイテムを含むセレクト ボックスは、ほとんど実用的ではありません。一度に取得できる結果が少なくなるように、フロント エンドに AJAX オートコンプリートを使用することをお勧めします。ここここ、その他にもいくつかあります。ご要望に応じてお選びいただけます。これは、通常の選択で非常にうまく機能します。私はしばらく前にそれに取り組みました。

于 2013-04-24T08:50:23.047 に答える
1

遅延の原因を突き止めるために、サイトのベンチマークを試してみましたか? これほど多くのレコードがあると、レンダリング時間だけでなくクエリ時間もかかると確信しています。それはあまりにも多くのデータです。データベース クエリにキャッシングを実装することは、ある面では役立つかもしれませんが、データベースはここでの大きな問題ではないと思います。

すべてのカテゴリを表示しないようにする必要があります。このようなものに対処する他の方法はありません。私はあなたのために働くかもしれない2つのアプローチを想像することができます:

  1. カテゴリをいくつかのスーパーカテゴリに分類しようとすると、ユーザーは最初にそれらのスーパーカテゴリを選択し、次にそれに属するカテゴリが (おそらく AJAX を介して) 遅延ロードされます。


  2. すべてのカテゴリを表示する代わりに、ユーザーがフィールドに入力した内容に基づいて提案されたカテゴリのリストを表示する入力フィールドを提供します。

  3. ユーザーが入力した他のすべてのデータを分析して、一致するカテゴリのリストを導き出すことをお勧めします。利用可能な値の量を考慮すると、それに対処するためのテキスト マイニング アプローチを構築するために時間を費やす価値があるかもしれません。

最も明白なのはカテゴリの数を減らすことですが、それは問題外だと思います。

ああ、余談ですreturnが、関数の実行が途中で終了するため、mysql_free_result($query);到達することはありません。とにかく置く場所が悪い。処理が完了したら、結果を解放する必要があります。

于 2013-04-24T08:49:01.767 に答える
0

選択ボックスを検索ボックスに変更してから、ajax で php を呼び出します。

于 2013-04-24T08:57:44.940 に答える
0

静的クエリの場合は、結果を毎回フェッチする代わりにキャッシュすることをお勧めします。最初は確実にロードされますが、後のリクエストでは問題になりません。

于 2013-04-24T08:43:24.343 に答える