2012-04-27 52 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列在主表中呢?