2012-04-27 82 views
0

我很困惑地問這個問題。如果有任何疑問,請讓我知道。我不知道該怎麼去問。Mysql查詢優化和排序

我在MYSQL數據庫中有90000以上的酒店列表。如果我搜索某個特定城市的酒店,通常會從90000條結果中找出列表。我想按照特定的城市對酒店進行分類。出於這個原因,我通常使用過濾查詢,但現在我已經注意到從90000列表中抽出結果需要很多時間。我認爲如果我搜索紐約市內的酒店,它會更好,它會從90000個列表中返回56家酒店,然後過濾(如價格,評級等)將僅從56個列表中搜索。 MYSQL有沒有辦法讓酒店退出?它可能被稱爲虛擬表或視圖,我不知道。請幫我解決。

+0

您的酒店餐桌是否在城市索引? – geoB 2012-04-27 13:19:18

+0

有一個你的表結構和索引列表將是一個非常好的開始。創建一個「視圖」可能不是你最好的答案,並且根據位置和定價結合查詢對於mysql來說是沒有任何處理的。 – DRapp 2012-04-28 00:05:22

回答

1

您可能會很好地完成一個查詢中的所有過濾和排序,但您需要將索引添加到您的基礎中。

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

90 000行:這是一個小桌子。通常處理10次以上,結果爲10ms。

+0

+1。 90K行確實是一張小桌子,劃分它看起來像是矯枉過正。 ) – raina77ow 2012-04-27 13:24:02

+0

它會更大。我正在爲此工作,它將接近約10,00,000家酒店 – user1361160 2012-04-27 13:29:00

+0

假設你的意思是1M或10M,那麼使用索引仍然是不錯的選擇。在出現在where或按子句排序的所有列上添加索引,這樣會很好。今天的基地很大。 – 2012-04-27 13:30:53

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列在主表中呢?