|
Планирование индексного для БД, вопрос новичка
|
|||
---|---|---|---|
#18+
alexeyvgКот Матроскинпропущено... Только ссылки на справочники из 256 элементов? ;) Как-то не очень вероятно имхо.Ну я обобщённо говорю, вообще про необходимость учёта размера хранения при выборе типа для некоторых случаев. Допустим, была таблица фактов - пара полей-ссылок типа INT, поле datetime, поле NUMERIC(38) То есть 4+4+8+17 = 33 байт Сделали пару полей-ссылок типа TINYINT, SMALLINT, поле INT (ссылка на календарь, ну или тип SMALLINT, тоже 4 байта), поле real Получилось 1+2+4+4 = 12 байт Почти в три раза, было хранилище к примеру 100 террабайт, стало 40, экономия. Ну вот я слабо верю в 40-терабайтную таблицу такой структуры. Просто чтобы первичный ключ не дублировался, в ней должны быть данные за 187 тыс. дат, т .е. минимум за 500 лет ;) В том-то и дело, если таблица фактов большая - то там разрезов штук 6, причем не на фиксированные справочники, а на бизнес-сущности и даты (т.е. не очень-то обойдешься tinyInt-ами), а ссылки на маленькие справочники больше характерны для всяких монструозных сущностей типа "Товар" или "Контрагент", где экономия 3х байт - как слону дробина. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2014, 13:05 |
|
Планирование индексного для БД, вопрос новичка
|
|||
---|---|---|---|
#18+
Я новичок, и вопрос соответсвенный: как нужно планировать индексы ?? По запросам. Какие критерии поиска в запросах, такие и индексы надо делать. На PK естественно надо индексы иметь всегда. Сам вопрос: 1) возможно как то реализовать средствами SQL лучше проверку на пустй автоинкремент?? или Возможно. Но не нужно. Пропуски в номерах в PK -- нормальное явление, с ним не нужно бороться. PK обязан быть уникальным, он не обязан быть последовательным. 2) проверка осуществляется средствами языка разработки, без использования типа АВТОИНКРЕМЕНТ ?? Это не понял. Проверка чего, и какими такими средствами. 3)есть ли ссылка на мануал , ка кправильно реализовывать такие маленькие справочники, т.к. я даже не могу сформулировать сам этот вопрос. Для таких маленьких справочников можно данные забить руками раз и навсегда, и забыть про них. В приложении не реализовывать возможность добавления вообще. Можно ID генерировать select coalesce(max(id),0)+1 from THETABLE ; но этот запрос по хорошему нужно пускать только на уровне SERIALIZABLE, т.е. с заблокированной за данной сессией всей этой таблицей эксклюзивно. Или пускать на обычном уровне изоляции, но быть готовым к коллизиям (если записи добавляют очень редко, а видимо это так для подобного справочника, то это не страшно, поскольку коллизии будут ещё более редки, чем случай добавления). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2014, 14:40 |
|
Планирование индексного для БД, вопрос новичка
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovalexeyvgПолучилось 1+2+4+4 = 12 байт Почти в три раза, было хранилище к примеру 100 террабайт, стало 40, экономия. На какой СУБД?MSSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2014, 09:44 |
|
Планирование индексного для БД, вопрос новичка
|
|||
---|---|---|---|
#18+
Кот МатроскинНу вот я слабо верю в 40-терабайтную таблицу такой структуры. Просто чтобы первичный ключ не дублировался, в ней должны быть данные за 187 тыс. дат, т .е. минимум за 500 лет ;) В том-то и дело, если таблица фактов большая - то там разрезов штук 6, причем не на фиксированные справочники, а на бизнес-сущности и даты (т.е. не очень-то обойдешься tinyInt-ами), а ссылки на маленькие справочники больше характерны для всяких монструозных сущностей типа "Товар" или "Контрагент", где экономия 3х байт - как слону дробина.В целом согласен, но я всё таки о принципе говорю, это же иллюстриция. Поле datetime содержит данные с интервалом не сутки, а меньше (измерение раз в минуту, раз в 15 минут), ну и измерений может быть много, но каждое ссылается на справочник с небольшим количеством значений. И размер может быть не 40 тб, а один, или пять - тоже достаточно для того, что бы попробовать уменьшить... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2014, 09:52 |
|
Планирование индексного для БД, вопрос новичка
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovJesterOKчто в ВУЗе, что я от другоих слышал: стараться уменьшать тип данных, т.к. от этого зависит размер и скорость обработки таблицы. В вашем ВУЗе, очевидно, ещё не знают, что на дворе 21-й век и использование типов данных с размером меньше 32-х бит только уменьшает скорость обработки. Dimitry SibiryakovПогуглите на тему "архитектура 32-х разрядных процессоров и их взаимодействие с оперативной памятью". Подтверждаю - все источники учат "уменьшать" тип данных и кол-во знаков по возможности. Я также вижу из каких именно старых источников передрали информацию "современные" авторы (преподы вузов), даже примеры и рисунки не меняли. Мануалы: Гарсия-Молина, Уллман - 2003 г. Дейт - 2005 г. Коннолли, Бегг - 2003 г. Новее только по SQL и конкретным СУБД, а по проектированию в целом. Спасибо за этот комментарий про разрядность. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 22:58 |
|
|
start [/forum/topic.php?fid=32&startmsg=38767776&tid=1539998]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 377ms |
0 / 0 |