Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Посоветуйте индексы для таблички  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
привет
есть табличка
replid bigint
replrev bigint уникальное значение
replact bigint
price real
volume bigint
time datetime
side int
isin_id int


записей в день 25 000 000 - вес 5 днейной таблички - 10 гигов
решил дробить данные на недельные таблички чтобы простой комп не умирал от селектов типа
select * from tbl where time between '1' and '2' and isin_id=1
данные в базу заноситься больше не будут тоесть это статичная база с куском данных
запросы будут такого вида
select * from tbl where time between '1' and '2' and isin_id=1

собственно вопрос - какие индексы сделать чтобы максимально быстро получать нужные куски данных - сколько индексов и какие
29 окт 11, 13:38    [11520774]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Alexander_fx
данные в базу заноситься больше не будут тоесть это статичная база с куском данных
запросы будут такого вида
select * from tbl where time between '1' and '2' and isin_id=1
Кластерный индекс (isin_id, time).

Если это сочетание полей уникальное, то уникальный.

Если так сделать, то:
Alexander_fx
решил дробить данные на недельные таблички чтобы простой комп не умирал от селектов типа
можно не разбивать - лишь бы хватило ресурсов на первоначальное построение индекса. Умирать не будет.
29 окт 11, 15:09    [11520908]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
alexeyvg,

спасибо за ответ
пара time , isin_id не уникальна
надо ли делать primary key по какому нить полю? просто как правило делаю PK а тут сомнения надо ли?
p.s сама база занимает 10 гигов а индекс time , isin_id - 3 гига так что думаю дробить на таблици - всего 16 гиг а работы ведуться как правило с 1-2 днем данных
29 окт 11, 15:39    [11520935]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Alexander_fx
надо ли делать primary key по какому нить полю? просто как правило делаю PK а тут сомнения надо ли?
Ну, исходя из постановки задачи - ПК не нужен.

Ведь таблица не меняется, и к ней возможен единственный запрос вида
select * from tbl where time between aaa and bbb and isin_id=nnn

Так зачем ей ПК? :-)

Уникальный индексы и ПК нужно делать исходя из бизнес-требований. Если у вас какое то сочетание полей уникально, лучьше сделать уникальный индекс или ПК.

Alexander_fx
p.s сама база занимает 10 гигов а индекс time , isin_id - 3 гига
Если сделать такой индекс, как я говорю, то он места занимать не будет.
Alexander_fx
так что думаю дробить на таблици - всего 16 гиг а работы ведуться как правило с 1-2 днем данных
При правильном индексе от дробления скорость только уменьшится. А вот геморроя от дробления добавится - это 100%
29 окт 11, 15:56    [11520957]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
alexeyvg,

так как индекс получается не уникальный - то возможен вариант когда имеется нексолько одинаковых по индексу записей
при такой плотности записей как у меня таких записей будет много
и без уникального ключа возможнт вариант когда в понедельник я получу записи в одном порядке а во вторник в другом
поле replrev уникально само по себе
как это можно использовать?
думаю так select * from tbl where time betwen a and b and isin_id=1 order by time,replrev
какие индексы посоветуете для такого запроса?
29 окт 11, 17:55    [11521070]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
iljy
Member

Откуда:
Сообщений: 8711
Alexander_fx,

кластерный уникальный по isin_id, time, replrev
29 окт 11, 23:14    [11521524]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
а есть разница в порядкее следования полей при создании индекса
тоесть различны ли индексы

isin_id, time, replrev
time, replrev , isin_id
и если различны то как поределить какую последовательность полей стоит выбрать при создании
30 окт 11, 07:51    [11521902]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
iljy
Member

Откуда:
Сообщений: 8711
Alexander_fx,

естественно есть. При сортировке поля используются в порядке указания, т.е. сначала сравнивается первое поле, при равенстве - второе и т.д.
30 окт 11, 10:55    [11522034]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Alexander_fx
и без уникального ключа возможнт вариант когда в понедельник я получу записи в одном порядке а во вторник в другом
С любым ключём существует такая вероятность.

Для сортировки нужно использовать ORDER BY

Для эффективной сортировки и высокой скорости запросов нужно сделать индекс, как сказал уже iljy, кластерный уникальный по isin_id, time, replrev

iljy
При сортировке поля используются в порядке указания, т.е. сначала сравнивается первое поле, при равенстве - второе и т.д.
Кроме соритровки, такой индекс правиьный, если для isin_id в условиях используется точное равенство, а для time диапазон.
30 окт 11, 12:46    [11522228]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
iljy
Member

Откуда:
Сообщений: 8711
alexeyvg
iljy
При сортировке поля используются в порядке указания, т.е. сначала сравнивается первое поле, при равенстве - второе и т.д.
Кроме соритровки, такой индекс правиьный, если для isin_id в условиях используется точное равенство, а для time диапазон.

Мне казалось, что это уже следствие, поэтому специально уточнять не стал
30 окт 11, 21:46    [11523306]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
непонятно почему индекс должен делаться
isin_id, time, replrev

если в запросе
select * from tbl where time betwen 1 and 2 and isin_id=1 order by id
сначала идет выборка по вермени а потом только isin_id
31 окт 11, 10:40    [11524604]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
iljy
Member

Откуда:
Сообщений: 8711
Alexander_fx,

эммм.... А вы как определили такой порядок?
31 окт 11, 10:48    [11524674]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
iljy,

дык читаю слева направо
или логика выборки не такая примитивная?
23 дек 11, 03:43    [11812492]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Alexander_fx
привет
есть табличка
replid bigint
replrev bigint уникальное значение
replact bigint
price real
volume bigint
time datetime
side int
isin_id int


записей в день 25 000 000 - вес 5 днейной таблички - 10 гигов
решил дробить данные на недельные таблички чтобы простой комп не умирал от селектов типа
select * from tbl where time between '1' and '2' and isin_id=1
данные в базу заноситься больше не будут тоесть это статичная база с куском данных
запросы будут такого вида
select * from tbl where time between '1' and '2' and isin_id=1

собственно вопрос - какие индексы сделать чтобы максимально быстро получать нужные куски данных - сколько индексов и какие

Можете привести результаты запросов
select count(distinct(time) from tbl 
-- И
select count(distinct(isin_id) from tbl 
23 дек 11, 11:39    [11813577]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте индексы для таблички  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Alexander_fx
или логика выборки не такая примитивная?
Разумеется, не такая.
23 дек 11, 11:43    [11813622]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить