![]() |
|
Модераторы: skyboy |
![]()
|
|
| Fally |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
Итак, здравствуйте. Есть таблица с информацией о пользователях вида:
На сайте есть форма поиска по многим параметрам. Некоторые из этих параметров располагаются явно в таблице, другие располагаются в других таблицах. В зависимости от введённых в форму данных, PHP автоматически генерирует запрос, например такой:
Вся проблема в том, что я даже не могу представить себе, как расставить индексы именно в таблице user_info для наиболее оптимального выполнения запроса. Проблема в том, что имена полей, которые участвуют в запросе могут меняться в зависимости от введённых данных, также может меняться и их количество. Таким образом изменяемыми могут быть: user_info_rname, user_info_rsurname, user_info_born_date, user_info_sex, user_info_find_work, user_info_end_university. Если кто знает, способ решения, пожалуйста поделитесь (: Заранее благодарен. P.S. Обязательных полей в запросе нет, т.е. если пользователь не заполнить форму поиска, то будет проведена выборка из таблицы без условий. |
||||
|
|||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 6 Всего: 401 |
Имхо, если добавление юзеров происходит существенно реже выборок, есть смысл проиндексировать по отдельности всё, "что движется" - кроме enum-ов.
Почему не int (unsigned)? Имхо, и места займет меньше, и выборка по индексу быстрее... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
SelenIT:
1) Так, проблема как раз в том, что неизвестно, насколько часто будет производиться добавление. А хотелось бы сделать наиболее оптимальную структуру индекса, чтобы на любом запросе использовалось как можно большее количество индексов. Хотя, что-то мне подсказывает, что не получиться так сделать.. Как вариант вести статистику запросов (какие чаще выполняются, а какие реже) и на основе этой статистики строить наиболее подходящий индекс. Но статистика вещь изменяемая к сожалению.. 2) есть такое очень маленькое неприятное "но": дело в том, что есть пользователи (и я в их числе) которые указывают номер своего ICQ с дефисами и хотят потом увидеть тоже самое с дефисами. Именно по этой причине и приходиться идти на уступки. Хотя возможно пересмотрю своё решение. Это сообщение отредактировал(а) Fally - 8.3.2008, 00:40 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
но что тебе мешает удалять дефисы при вводе(чтоб получить целое беззнаковое), а при выводе - разбивать на триплеты, как это делается с телефонным номером? и будет людям "с дефисами"...
|
|||
|
||||
| Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
Выборка чаще и следовательно я не должен тыкать всякое поле в индекс... всё-таки придётся сначала ставить индекс на user_info_rname и user_info_rsurname и вести статистику запросов, и следуя статистике уже расставлять индекс.. (но не нравиться мне это решение)...
|
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 6 Всего: 401 |
Почему? Если выборки по всем полям в первом приближении равновероятны? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
не так высказался (:
Дело в том, что если взять каждое поле в отдельный индекс, то при любом запросе будет использоваться только один индекс, даже если в запросе будут участвовать два или более полей. + сейчас известно что выборки будут часты, но пока ничего не известно о том, как часто будет производиться изменение данных в таблице, и если окажется что и изменение будет проводиться тоже часто, то на модификацию индексов будет уходить много времени. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |