2012-04-27 11 views
0

質問に困惑しています。もし何か質問があれば教えてください。私はそれを求める方法を知らない。Mysqlのクエリの最適化とソート

MYSQLデータベースに90000以上のホテルリストがあります。特定の都市のホテルを検索すると、通常90000の結果からリストが取り出されます。特定の都市と比較してホテルを並べ替えたいこのため、通常はフィルタリングクエリを使用しますが、今は90000リストから結果を引き出すのに多くの時間がかかります。ニューヨーク市のホテルを検索すると、90000リストから56のホテルが返され、価格、評価などのフィルタリングが56リストからのみ検索されます。 MYSQLにホテルを引き出す方法はありますか?それは私が知らない仮想テーブルまたはビューと呼ばれることがあります。解決するのを手伝ってください。

+0

ホテルのテーブルは都市のインデックスに登録されていますか? – geoB

+0

テーブル構造とインデックスのリストを持つことは、非常に良いスタートになります。 "ビュー"を作成することはあなたの最善の答えではないかもしれませんし、場所と価格でクエリを組み合わせることは、mysqlが処理するためのものではありません。 – DRapp

答えて

1

1つのクエリですべてのフィルタリングと並べ替えを行うことができますが、ベースにインデックスを追加する必要があります。

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

90 000行:それは小さなテーブルです。通常10倍以上処理し、結果は10msです。

+0

+1。 90Kの行は実際には小さなテーブルであり、それを分割することは過度のようです。 ) – raina77ow

+0

それは大きくなります。私はそれに取り組んでおり、それは約10,00,000のホテルの近くに行くでしょう – user1361160

+0

あなたは1Mまたは10Mを意味すると仮定して、インデックスを使用してもまだ行く方法です。 where節またはsort by節に現れるすべての列に索引を追加すると、問題なく終了します。今日の拠点は巨大です。 –

0

さて、あなたはいつもそのように、ビューを使用することがあります。

CREATE VIEW ny_hotels AS 
SELECT price, range, etc FROM hotels WHERE city = 'NY' 

を...その後、通常のテーブルのように、このビューを問い合せ:

SELECT price, rating FROM ny_hotels WHERE hotel_id = @some_hotel_id 

しかし、私はcity列のインデックスを作成提案することができます代わりにメインテーブルに?