2012-05-15 7 views
0

У меня есть один (элементы [id, name, color, size и т. Д.]) Таблица с более чем 6000. И я думаю, что она может достигать 10000 максимум. В этой таблице в основном есть информация о, ну, элементы. У меня также есть 5 таблиц постоянных хранилищ и от 0 до 7 таблиц временных хранилищ. Эти таблицы похожи на это (id, item_id, количество). Я попытался нормализовать эту базу данных, объединив эти хранилища в одной таблице (id, item_id, quantity, storehouse_id). Это сделало поиск крайне медленным 6-10 секунд при поиске нескольких элементов из всех хранилищ с использованием самосоединений. Затем я решил объединить элементы с этой недавно созданной базой данных (id, name, color, size и т. Д., Storehouse1_quantity, storehouse2_quantity и т. Д.). Это сделало запросы менее 0,1 с для любого запроса. Но теперь база данных очень денормализована. Поскольку хранилища имеют не более 2000 предметов и в основном меньше 500. Я могу жить с этим, если нет лучшего способа. Я не знаю, где искать, чтобы сделать базу данных более логичной и более простой в обслуживании. Любая помощь приветствуется! Заранее спасибо!Mysql big table vs join

ответ

1

Ну, нормализующий подход - это «правильный» способ, и поскольку для этого используются механизмы БД, я бы начал смотреть на то, что у вас есть. Если есть много поисков/объединений, обычно должен быть индекс, чтобы MySQL не должен перебирать весь текст.

+0

Каждое поле в таблице индексируется, по которому можно выполнить поиск. Это просто то, что поиск делает такой же цикл через таблицу столько раз, сколько есть хранилища, и снова присоединяется к таблице элементов. – Hander

+0

Я могу предложить только посмотреть, как вы храните эти данные ... если это сложно получить, возможно, корректировка дизайна для некоторой сводной информации где-то может быть в порядке. – GDP