День добрый.
Допустим существует несколько типов данных. Количество типов - фиксировано. Как лучше хранить, в плане производительности, данные в одной таблице или в нескольких? Я к чему веду: зависит ли скорость выборки, если объем у баз одинаковый, а данные в одном случае в разных таблицах, в другом случае в одной таблице? Или это зависит от физического рассположения данных внутри базы (начало или конец)? Я как то раньше над этим не задумывался, а тут спросили и я растерялся.
С уважением, Дмитрий
Проектирование базы
если это не имитация ООБД, то рекомендую не морочить голову складыванием однотипных столбцов в одну таблицу.
Скорость выборки зависит, потому что элементарных выборок типа выбрать 1000 записей по 10 столбцов или 10К записей по 1 столбцу при такой схеме не будет. обязательно join и т.п. А чем больше объединений, проверок и т.п., тем хуже производительность.
от физического расположения данных практически ничего не зависит, это тут вообще ни при чем.
Скорость выборки зависит, потому что элементарных выборок типа выбрать 1000 записей по 10 столбцов или 10К записей по 1 столбцу при такой схеме не будет. обязательно join и т.п. А чем больше объединений, проверок и т.п., тем хуже производительность.
от физического расположения данных практически ничего не зависит, это тут вообще ни при чем.
С точки зрения приложения, лучше держать в одной таблице. Так проще выполнять выборки и практически без 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
Наличии индексов подразумевается
С уважением, Дмитрий
Пример:
Объем базы 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
Наличии индексов подразумевается
С уважением, Дмитрий
я тебе сразу могу сказать, что будет ж, т.е. задняя часть тела.
потому что:
1. в одной таблице будут данные из двух таблиц. Следовательно, индекс по IDDate будет в 2 раза больше.
2. судя по контексту предполагается малое число типов объектов, например до 20, так? Значит индекс по IDType будет содержать тучу одинаковых значений, то есть иметь низкую селективность.
как итог. слияние двух индексов вместо одного будут жрать память, и т.д. Рекомендую протестить, конечно, но первичный вывод "на глазок" именно такой.
потому что:
1. в одной таблице будут данные из двух таблиц. Следовательно, индекс по IDDate будет в 2 раза больше.
2. судя по контексту предполагается малое число типов объектов, например до 20, так? Значит индекс по IDType будет содержать тучу одинаковых значений, то есть иметь низкую селективность.
как итог. слияние двух индексов вместо одного будут жрать память, и т.д. Рекомендую протестить, конечно, но первичный вывод "на глазок" именно такой.