2011-10-19 22 views
1

私はPHPで書かれた検索ページを持っており、MySQLデータベースを検索する必要があり、その結果をソート可能にする必要があります。この検索ページには、多くのユーザーがアクセスできます(いつでも> 1000)。MySQL一時テーブルを使用して検索結果を保存できますか?

しかし、非常に遅いので、検索結果をMySQLで並べ替えることはできません。

私は、一時テーブル(ないMySQLの一時テーブル)に各検索結果を保存すると思って、テーブル名は、このような参照のために別のテーブル内に格納されている:

| id | table_name | timeout | 
----------------------------- 
| 1 | result_1 | 10000 | 
| 2 | result_2 | 10000 | 

その後、私は使用することができますテンポラリテーブルを使用して、クエリを再構築する必要なしに(必要に応じて)検索結果を並べ替えることができます。

各テーブルは、指定されたタイムアウトに従って削除されます。

クエリで使用されている既存のテーブルの構造を変更できないとすれば、これは良い解決策ですか、それとも良い方法がありますか?ご意見をお聞かせください。

おかげ

+2

テーブルが正しく設定されている場合、MySQLでソートすることはその1、ほぼすべての選択肢よりも高速でなければなりませんdbが設計したもののうち –

+0

キーワードの頻度などに基づいてランク付けされたソート結果が必要な場合は、SQLのcase文を使用して追加のソート列を生成します。新しいテーブルにクエリ結果を格納すると、クエリが高速になります。挿入する余分なデータがあれば、パフォーマンスが低下する可能性があります。 –

+0

私は@ダゴンに同意します。なぜそれはmysqlの結果を並べ替えることができないのでしょうか?データベースシステムは、フィルタリングとソートで高速に設計されています。それはインデックスの問題、またはテーブルのデザインの問題になりますか? – iWantSimpleLife

答えて

1

あなただけのメモリ内に、検索結果をキャッシュしたい場合に永続的なデータベースに結果を格納するのトラブルに行く必要はありません。リレーショナルデータへのインデックスアクセスが必要ですか?答えが「いいえ」の場合は、MySQLデータベースに格納しないでください。

私は、phpbb(MySQLバックエンドをサポートするオープンソースのWebフォーラム)は、キー値ストアを使用して検索結果を戻すことを知っています。特定の結果ページ(URLのクエリ文字列に検索IDハッシュを含む)へのリンクを与えるようにフォーラムが設定されている場合、そのリンクはしばらく有効ですが、最終的にはキャッシュからフラッシュされます。 MySQLに設定されていれば、完全なデータベース抽象化レイヤーを実装するのは難しいかもしれません。とにかく:

http://wiki.phpbb.com/Cache

あなただけの結果データを保存するためにmemcachedのか何かを使用する必要があり、あなたは簡単にデータを取得し、PHPでそれを並べ替えることができます。また、ロードのコストとインタプリタからデータをオフロードを最小限に抑えるいくつかのPHP固有のキャッシュフレームワークがあります。

https://en.wikipedia.org/wiki/List_of_PHP_accelerators

関連する問題