длительность запроса в MySQL

Virineia

Стоит дилемма перед выбором - делать одну большую таблицу или две поменьше. Между таблицами поменьше взаимооднозначное соответствие, т.е., количество записей в каждой из них равно количеству записей в большое таблице. Внесённые данные будут использоваться для поиска, соответственно, поля будут индексироваться, эти же поля и предполагается разнести по разным малым таблицам.
Вопрос: что оптимальнее, когда поиск будет идти одновременно по обоим полям? Будут ли мешать друг другу индексы в составе одной таблицы или же бОльшие помехи создаст то, что понадобится поиск одновременно по двум таблицам?

mbolik1

Ничего не понятно.
Приведи предлагаемые решения:
1. Структура таблиц
2. Индексы
3. Ориентировочное кол-во записей в каждой таблице и прирост
4. Какие запросы наиболее критичны по времени.

Virineia

Приведи предлагаемые решения:
1. Структура таблиц
2. Индексы
3. Ориентировочное кол-во записей в каждой таблице и прирост
Большая таблица:
id(int) | date(datetime) | field1(int) | field2(int) | trash1,2,3,4(varchar)
Малые таблицы:
id(int) | date(datetime) | field1(int) | trash1,2(varchar)
id(int) | date(datetime) | field2(int) | trash3,4(varchar)
Поиск ведётся по field1 и field2, индексы на них.
Про объёмы и прирост информации пока нет. Предположительное количество записей - 50 000.

mbolik1

Если я правильно понял всегда заполняются либо field1(int) и trash1,2(varchar) либо field2(int) | trash3,4(varchar)
Так по чему бы их не объединить?

Virineia

не понял, что скрывается здесь под словом "объединить"
смысл в том, что при внесении записи заполняются все приведённые поля, будь они в составе одной большой таблицы или обеих малых. Поиск в 60% случаев ведётся по field1 и field2 одновременно, в 20% только по field1 и в 20% только по field2.
В таблице (в большой или каждой из малых) 50000 записей. Вопрос в том, какую модель использовать лучше в плане скорости, нагрузки на сервер.
Объединить - это в одну таблицу или две таблицы в одном запросе?

mbolik1

Раз так то только одна таблица иначе сразу просядешь по производительности когда для запроса по field1 и field2 тебе придётся таблицы объединять.
Разносить данные(которые одновременно заполняются) по двум таблицам имеет смысл только если данные в одной из таблиц используются крайне редко.
Индексы друг другу не мешают, мешают только вставке: чем больше индексов тем дольше вставлять одну строку.
В твоём случае я бы подумал об одном индексе сразу по двум полям скажем (field1, field2) он покроет 80% запросов, если не жалко то к нему можно добавить ещё индекс по field2 он покроет оставшиеся 20%.

Virineia

благодарю

kill-still

В данном случае ответ на мой взгляд очевиден - одна таблица.
Ну и вообще по уму всегда надо следовать правилам нормальных форм и не нарушать их.
А если надо оптимизировать скорость - делать представление(view) или там другие всякие технологии.

voronina

А если надо оптимизировать скорость - делать представление(view) или там другие всякие технологии.
view в mysql не может ускорить исполнение.
Оставить комментарий
Имя или ник:
Комментарий: