Задавайте вопросы, мы ответим
Вы не зашли.
Доброго всем дня!
Мне уже помогли здесь разобраться с запросом, большое спасибо. Подскажите как правильно построить INDEX
вот пример запроса:
Неактивен
Мыслите правильно, нужен действительно индекс, который покроет как
можно большее количество ограничений в WHERE. Есть только «но»:
hotel_city не находится в price, поэтому его добавлять не получится
Что касается порядка размещения — лучше в начало индекса ставить
поля, которые наиболее селективные (т.е. выборка одного значения
сужает количество строк б́ольшим образом). Кажется, в данном случае
я бы сделал индекс на (price_data, room_id, price_price). Ну и после
price_price уже ничего больше ставить нельзя, т.к. после диапазонного
поиска индекс уже дальше использоваться не может.
Неактивен
спасибо.
возник еще один вопрос. в чем разница между записями
KEY `name_key` (.....)
и
INDEX `name_key` (...)
Неактивен
Никакой разницы, это полные синонимы.
Неактивен
ерунда у меня получается с этим индексом
У меня получается что в любом запросе даже самом минимальном присутствует в условии WHERE (hotel_country='TR' OR hotel_country='Егип') AND room_id = '1' AND price.price_data='20110127' ...
то есть, поле 'hotel_country' из таблицы hotel, а потом уже идут поля из таблицы 'price'. Может необходимо перестроить запрос?
Вот минимальный и он же используемый наиболее часто:
Отредактированно sbury (08.02.2011 13:22:18)
Неактивен
Видимо, нужны индексы на price(price_data), tour(tour_id), hotel(hotel_id).
Неактивен
Так они есть:
Отредактированно sbury (09.02.2011 13:54:57)
Неактивен
А что Вас не устраивает в текущем положении вещей? 500 строк достаете,
вполне нормальная выборка. Дальше, видимо, только денормализацией
действительно.
Индексы будут поддерживаться сами, а вот денормализацию (типа добавления
страны в price) прийдется поддерживать вручную.
Неактивен
paulus написал:
Индексы будут поддерживаться сами, а вот денормализацию (типа добавления
страны в price) прийдется поддерживать вручную.
А вот это можно по подробней, как это делается?
Неактивен
Вручную Правда. Т.е. если у Вас вдруг у отеля меняется
страна (например, Египет поделился на пять разных маленьких
подстранок), то в price прийдется обновлять информацию вручную.
Неактивен
Большое спасибо за популярное объяснение!
возник еще вопрос. если я сбросил базу по mysqldump, индексы сохраняются тоже. Или их необходимо делать заново после восстановления?
Неактивен
Эээ... «индексы сами создадутся при восстановлении». Так будет правильнее
Неактивен