Проектирование базы

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
DmitryLe
Сообщения: 22
Зарегистрирован: 01 ноя 2004, 09:13

Проектирование базы

Сообщение DmitryLe » 19 дек 2004, 13:00

День добрый.
Допустим существует несколько типов данных. Количество типов - фиксировано. Как лучше хранить, в плане производительности, данные в одной таблице или в нескольких? Я к чему веду: зависит ли скорость выборки, если объем у баз одинаковый, а данные в одном случае в разных таблицах, в другом случае в одной таблице? Или это зависит от физического рассположения данных внутри базы (начало или конец)? Я как то раньше над этим не задумывался, а тут спросили и я растерялся.
:oops: С уважением, Дмитрий

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 19 дек 2004, 14:38

если это не имитация ООБД, то рекомендую не морочить голову складыванием однотипных столбцов в одну таблицу.

Скорость выборки зависит, потому что элементарных выборок типа выбрать 1000 записей по 10 столбцов или 10К записей по 1 столбцу при такой схеме не будет. обязательно join и т.п. А чем больше объединений, проверок и т.п., тем хуже производительность.

от физического расположения данных практически ничего не зависит, это тут вообще ни при чем.

DmitryLe
Сообщения: 22
Зарегистрирован: 01 ноя 2004, 09:13

Сообщение DmitryLe » 19 дек 2004, 18:39

С точки зрения приложения, лучше держать в одной таблице. Так проще выполнять выборки и практически без join. Я сформулирую свой вопрос по-другому. Влияет ли количество записей на производительность или нет, если объем данных одинаковый.
Пример:
Объем базы 1Гб
Table1
IDDate
IDField
Teble2
IDDate
IDField
или
Table1
IDDate
IDField
IDType

Будет ли разница
В первом случае (отдельно каждый запрос)
Select * from Table1 where iddate>='01.01.2005'
Select * from Table2 where iddate>='01.01.2005'
Во втором случае (отдельно каждый запрос)
Select * from Table1 where iddate>='01.01.2005' and IDType=1
Select * from Table1 where iddate>='01.01.2005' and IDType=2
Наличии индексов подразумевается
С уважением, Дмитрий

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 20 дек 2004, 09:42

ну и проверь. взял, налил данных, и проверил. 1 гиг - это налить элементарно.

DmitryLe
Сообщения: 22
Зарегистрирован: 01 ноя 2004, 09:13

Сообщение DmitryLe » 20 дек 2004, 09:51

ОК. Проверю. Интерес был академический.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 20 дек 2004, 10:51

я тебе сразу могу сказать, что будет ж, т.е. задняя часть тела.
потому что:

1. в одной таблице будут данные из двух таблиц. Следовательно, индекс по IDDate будет в 2 раза больше.
2. судя по контексту предполагается малое число типов объектов, например до 20, так? Значит индекс по IDType будет содержать тучу одинаковых значений, то есть иметь низкую селективность.

как итог. слияние двух индексов вместо одного будут жрать память, и т.д. Рекомендую протестить, конечно, но первичный вывод "на глазок" именно такой.

Ответить