Что лучше 3 таблицы с большим количеством данных или много маленьких таблиц
GHostly_FOX
Дата: 07.01.2013 13:22:07
Сейчас веду работу по созданию каталога товаров на базе MySQL.
ОСь CentOS, База MySQL 5.5, типы таблиц InnoDB
В базе будут храниться каталоги товаров с разными характеристиками товаров и сейчас стою перед выбором:
- Создать базу с множеством таблиц разной структуры для различных категорий товаров.
- Создать базу с 4 таблицами в которых будут храниться категории товаров в первой, товары (общие поля для всех товаров) во второй, характеристики товаров с привязкой к категориям в третьей и в четвертой значения характеристик товаров с привязками к товарам и к справочнику характеристик.
Данных планируется более 2 - 3 млн. товаров. Более 50 различных категорий товаров (это количество может расти).
И вот не знаю, что лучше - много маленьких таблиц или несколько но больших???
InterSky
Дата: 07.01.2013 14:55:07
Простая математика:
если поле проиндексировано что для поиска в таблице где 1024 записи надо всего 10 обращений к ней. Если у тебя чуть больше миллиона - то всего 20 обращений к ней (потому что миллион - это два в 20-ой степени). Тоесть если у тебя 4 миллиона записей - нам надо 22 обращения.
Допустим ты рещил разбить свою большую таблицу на 4 таблицы в каждой из которых по 1 миллиону записей. Итого чтобы осуществить поиск в 4-рёх таблицах по 1 миллиону - тебе надо 80 обращений...
Сам считай что медленней 22 обращения или 80 :)
Хотя тут наверно всё же от категорий зависит. Если это Телефоны и Стиралки, то я бы делал:
Общая таблица с товаром (ID,НомерКатегория,название,цена,ДатаПоставки)
Таблица с названиями категорий (IDкатегории,НазваниеКатегории)
таблица с характеристиками (IDтовара,НомерХарактеристики,СамоЗначениеХарактеристики)
таблица с названиями харктеристик (IDхарактеристики,НазваниеХарактеристики)
итого: надо найти все холожильники высотой больше метра: ищем в таблице характеристик где СамоЗначениеХарактеристики больше метра и при этом НомерХарактеристики соответсует значению "Высота холодильника".
А если надо найти все характеристики холодильника Atlan ZU-1212 - то ищешь его в таблице с товаром, и потом из таблицы с характеристиками выводишь все характеристики с его ID.
ScareCrow
Дата: 07.01.2013 15:15:18
| автор |
|---|
| если поле проиндексировано что для поиска в таблице где 1024 записи надо всего 10 обращений к ней |
слава богу разработчики СУБД про это не знают.
| автор |
|---|
| много маленьких таблиц или несколько но больших? |
больший таблицы однозначно лучше, тем более что у тебя они не большие. можно сказать даже маленькие.
то что ты хочешь делать называется EAV. почитай.
InterSky
Дата: 07.01.2013 15:38:56
| ScareCrow |
|---|
| слава богу разработчики СУБД про это не знают. |
что ты имел в виду?
Arhat109
Дата: 07.01.2013 15:59:58
GHostly_FOX,
возьмите magento и не парьтесь. Там всё уже сделано до Вас.
ScareCrow
Дата: 07.01.2013 19:25:28
| InterSky |
|---|
| ScareCrow |
|---|
| слава богу разработчики СУБД про это не знают. |
что ты имел в виду? |
для поиска одной записи по индексу нужно два, для ОЧЕНЬ больших диапазонов три сравнения.
GHostly_FOX
Дата: 07.01.2013 21:16:10
| ScareCrow |
|---|
| автор |
|---|
| если поле проиндексировано что для поиска в таблице где 1024 записи надо всего 10 обращений к ней |
слава богу разработчики СУБД про это не знают.
| автор |
|---|
| много маленьких таблиц или несколько но больших? |
больший таблицы однозначно лучше, тем более что у тебя они не большие. можно сказать даже маленькие. то что ты хочешь делать называется EAV. почитай. |
Спасибо! Буду читать.
| Arhat109 |
|---|
GHostly_FOX,
возьмите magento и не парьтесь. Там всё уже сделано до Вас. |
Спасибо! Но задача у меня другая - разработка на Yii.
miksoft
Дата: 07.01.2013 21:32:58
| ScareCrow |
|---|
| InterSky |
|---|
пропущено...
что ты имел в виду? |
для поиска одной записи по индексу нужно два, для ОЧЕНЬ больших диапазонов три сравнения. |
два-три одноблочных логических дисковых чтений - еще может быть (хотя и маловато), но никак не два-три сравнения.
ScareCrow
Дата: 07.01.2013 21:45:38
ну мне индексов глубиной больше трех видеть не доводилось. корневые блоки всегда в памяти. а по нынешним временам так и полбазы. откуда еще чтения?
tanglir
Дата: 08.01.2013 07:30:05
ScareCrow, не чтения, а сравнения. Хотя ТС имел в виду, похоже, именно чтения.