| Уважаемые знатоки, подскажите, пожалуйста, как лучше сделать большую базу данных. Уже несколько дней сижу и перечитываю все возможные форумы, чем больше читаю – тем больше запутываюсь. Одни говорят одно, другие говорят другое, третьи козыряют тестами и доказывают третье.
К примеру взять сайт-каталог фильмов:
Есть таблица «Фильмы»: id, id категории, id актеров, описание, год, рейтинг, постер, хиты и еще штук 15 полей.
Есть таблица «Люди»: id, id фильма, описание, год, рейтинг, фото, хиты и так далее, тоже полей 10 – 15.
Таблица «Персонажи»: id, id фильма, описание, рейтинг, и тд.
Таблица категорий: id, id родителя, описание, и тд еще штук 10.
В таблице фильмов будет не меньше 200000 записей, но, скорей всего до миллиона. Людей будет где то 150000, а может и больше. Категорий штук 300. Персонажей несколько десятков тысяч.
На сайте будут выполняться «сложные» запросы, например: показать фильмы такого-то человека, за 2004 год, сортировать по рейтингу (названию, хитам), лимит 20.
Или показать все фильмы данного автора, сортировать по годам. Или показать 50 фильмов из данной категории, пропустив сначала 12750. Ну и так далее.
С таблицами, где количество строк измеряется сотнями, я бы все сделал не задумываясь. Но в данном случае речь идет о сотнях тысяч и мне очень важна производительность.
Поэтому у меня возникает вопрос как лучше создавать таблицы, стоит ли выносить в отдельные таблицы поля с айдишниками? И если выносить, то, как тогда делать сложные выборки с множеством переменных? Или нужно создавать отдельно таблицы с продублированной информацией, например:
Таблица «люди-фильмы»: id человека, id фильма, статус человека (опубликован ли), статус фильма, год фильма, рейтинг фильма ну и тд.
Таблица «категории-фильмы»: id категории, id фильма, статус категории, статус фильма, год фильма, рейтинг фильма и тд.
В общем создавать таблицы только из цифер и делать на все поля индекс.
Будет ли при данной разбивки одной таблицы на несколько поиск выполняться быстрее? Или я написал ересь?
Или лучше вынести только «прямые связи» по id в отдельную таблицу? Тогда получается что нам нужно сначала из такой таблицы выбрать все интересующие нас id в массив, а потом из полученного массива производить выборку с сортировкой.
В общем, помогите разобраться, как сделать лучше? Если у кого-то есть опыт работы с большими таблицами, то приведите, пожалуйста, цифры – как и что быстрее и почему? | |