2012-04-27 3 views
0

Я смущен задавать вопрос. Если какие-либо вопросы, пожалуйста, дайте мне знать. Я не знаю, как это спросить.Mysql Query Оптимизация и сортировка

У меня есть свыше 90000 списков отелей в базе данных MYSQL. Если я ищу отели для определенного города, как правило, он выбирает списки из 90000 результатов. Я хочу сортировать отели против конкретных городов. По этой причине обычно я использую фильтр-запрос, но теперь я заметил, что для вывода результатов из списка 90000 требуется много времени. Я думаю, было бы лучше, если бы я искал отели в Нью-Йорке, он вернет 56 отелей из 90000 списков, и после этого фильтрация, такая как цена, рейтинг и т. Д., Будет искать только из 56 списков. Есть ли способ в MYSQL выйти из отелей. Его можно назвать виртуальной таблицей или представлением, о котором я не знаю. Пожалуйста, помогите мне решить.

+0

Является ли ваш гостиничный стол индексированным по городу? – geoB

+0

Наличие списка структуры и индексов таблицы было бы очень хорошим началом. Создание «Просмотр» может быть не лучшим ответом, и объединение запроса по местоположению и ценообразованию не является чем-то, что нужно для обработки mysql. – DRapp

ответ

1

Вы можете очень хорошо выполнять всю фильтрацию и сортировку в одном запросе, но вам нужно добавить индексы на свою базу.

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

90 000 строк: это маленький столик. Обычно приходится иметь дело в десять раз больше и иметь результаты в 10 мс.

+0

+1. Строки 90K - это крошечная таблица, и разбиение на нее выглядит излишним.) – raina77ow

+0

Это будет больше. Я работаю над этим, и он приблизится к около 10 000 000 отелей. – user1361160

+0

Предполагая, что вы имеете в виду 1M или 10M, использование индексов по-прежнему остается. Добавьте индексы ко всем столбцам, появляющимся в где или сортировать по предложениям, и все будет хорошо. Сегодняшние базы - БОЛЬШИЕ. –

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 колонки вместо этого в главном столе?