Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Суть проблемы такова: есть таблица MB(ID,PHONE,Name, Surname,....,PROFIT,PARENT_ID), т.е. иерархическая структура. Но дело ни в этом. Каждый месяц нужно будет заполнять поле PROFIT для каждого ID, причем количество записей будет расти. К тому же нужно хранить данные за предыдущие месяцы. Пока на ум пришло 2 способа: 1) каждый месяц программно создавать новые таблицы типа FEE082004(ID,PROFIT) FEE092004(ID,PROFIT) ... и с ними работать. 2) Создать одну таблицу FEE(ID,DATE,PROFIT) c ключем (ID,DATE). Второй способ вроде проще, но ведь таблица будет очень быстро расти, т.е. если в первом месяце было n записей, то во втором 2*n+k (k - прибавилось за месяц), в третьем - 3*n+2*k+k2... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2004, 21:15 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Ни в коем случае приложение не должно создавать в базе новых постоянных таблиц! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2004, 23:07 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Возможен промежуточный вариант: допустим наиболее часто используемыми у нас являются последние 3 месяца, тогда эти три месяца хранить в одной таблице (оперативные данные), а все остальные данные хранить в таблице архива и периодически переносить данные в архив. В этом случае: 1. Поскольку архив будет обновляться редко, а в основном из него будут извлекаться данные, то можно организовать индексы соответствующим образом (например кластерными индексами в MsSQL) 2. В таблице оперативных данных будет не так много записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 09:25 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
T0nic Если очень нужно то - создаете 2 (или более) таблиц - например FEE_CUR(ID,DATE,PROFIT) и FEE_ARC(ID,DATE,PROFIT) в первой все записи за текущий месяц, во второй все остальные - затем создаете Partitioned View (если у вас MS SQL2000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 09:49 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
T0nic Если очень нужно то - создаете 2 (или более) таблиц - например FEE_CUR(ID,DATE,PROFIT) и FEE_ARC(ID,DATE,PROFIT) в первой все записи за текущий месяц, во второй все остальные - затем создаете Partitioned View (если у вас MS SQL2000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 09:51 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Одна большая таблица (при условии нормализации) гораздо выгоднее чем много мелких, тем более постоянно создаваемых. Меньше кода надо писать. А IO будет примерно одним и тем же. Проще большую таблицу и ее индексы разнести по дискам, если уж так сильно не устраивает производительность. Или опять же выделить кэши специально для индексов/данных именно этой таблицы. Пересмотреть индексы - по возможности уменьшить количество индексов за счет создания составных индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 10:14 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Ну, если на MSSQL делать, то рекомендую одну большую таблицу и indexed view для "актуальных" значений... Тогда и скорость будет очень высокая и проблем с архивацией никаких.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 15:53 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Наколько я понял, почти все поля таблицы являются постоянными, изменяется во времени только профит? Тогда, имхо, лучше его вынести в отдельную таблицу с датой cмены значения, т.е: create table MB(ID,PHONE,Name, Surname,....,PARENT_ID) create table MB_PROFIT_HISTORY( ID, CDate, PROFIT, -- новое значение, действует с CDate primary key (id, cdate) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 15:19 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
И еще. Не так давно у меня была мысль хранить в истории изменений атрибута не только дату начала действия, но и дату конца - либо null, если это последняя дата. По идее, такой подход требует дополнительных вложений в поддержку автоматического заполнения даты окончания действия (которое несложно реализовать триггерами) - но дает выигрыш в выборке значения на дату, т.е. не требует использования подзапроса: select value from t where id = :id and cdate = ( select max(cdate) where id = :id and cdate < :to_date ) так вот. на практике такой подход я не реализовывал и хочу спросить, не пробовал ли кто сделать такое и стоит ли овчинка выделки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 15:27 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
Сорри, не договорил. Вместо подзапроса можно использовать: select value from t where id = :id and ((:to_date between cdate and edate) or (:to_date >= cdate and edate is null)) В общем, интересно, какой именно из запросов легче для выполнения - и насколько это зависит от оптимизатора СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 15:33 |
|
||
|
Что лучше - одна большая таблица или много маленьких?
|
|||
|---|---|---|---|
|
#18+
>Не так давно у меня была мысль хранить в истории изменений атрибута не только дату начала действия, но и дату конца - либо null, если это последняя дата. я так делаю, только вместо null пишу условный "конец времен" - 21000101 тогда не надо писать так Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 15:34 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32632422&tid=1546329]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 466ms |

| 0 / 0 |
