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

Откуда:
Сообщений: 1058
Доброе утро!

Есть таблица1
ID(int) , DATE(int)

join таблицы2 по ID (INT)
join таблицы3 по ID(int) , DATE(int)

Я думаю сделать
класерный индекс на ID(int) или на DATE(int) или на составной (ID(int) и DATE(int)), а остальные сделать не кластерными

размеры таблиц по 150 000 000
27 авг 13, 12:05    [14759635]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
кириллk,

Вы спросить что-то хотели, или так, мысли вслух излагаете?
27 авг 13, 12:12    [14759681]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
кириллk
Я думаю сделать
класерный индекс на ID(int) или на DATE(int) или на составной (ID(int) и DATE(int)), а остальные сделать не кластерными

- Вы про все 3 таблицы ?
- Кластерный индекс входит во все некластерные
27 авг 13, 12:15    [14759702]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
Гость333,

Я прочитал что индекс по ID, date, или ID+date это разные вещи, но оптимизатор может выбрать сам какой индекс ему нужен

Вопрос привязываться ли к date или везде тянуть только ID?
27 авг 13, 12:20    [14759745]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35080
Блог
кириллk,

это зависит от запросов...
не нужно строить "сферические" индексы
27 авг 13, 13:31    [14760258]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
Критик,

есть конкретный пример

select * from [dbo].[т1] du
left join [dbo].[т2]fc on fc.id= du.id
left join [т3]dh on dh.id=fc.id and dh.DATE=fc.DATE
27 авг 13, 15:10    [14760908]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
кириллk
Критик,

есть конкретный пример

select * from [dbo].[т1] du
left join [dbo].[т2]fc on fc.id= du.id
left join [т3]dh on dh.id=fc.id and dh.DATE=fc.DATE
Для такого запроса вам вообще не нужны индексы на т1. Только место занимать будут.
28 авг 13, 03:32    [14763570]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
кириллk

есть конкретный пример

select * from [dbo].[т1] du
left join [dbo].[т2]fc on fc.id= du.id
left join [т3]dh on dh.id=fc.id and dh.DATE=fc.DATE

По т1 индексов не надо
По т2 индескс по id
По т3 индескс по id+date
Лучше кластерные, ибо select *
28 авг 13, 10:26    [14764245]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
кириллk
размеры таблиц по 150 000 000


кириллk
есть конкретный пример

select * from [dbo].[т1] du
left join [dbo].[т2]fc on fc.id= du.id
left join [т3]dh on dh.id=fc.id and dh.DATE=fc.DATE

Берут сомнения, что это конкретный пример. Выхлоп такого запроса, если верить первой цитате, составит не менее 150 млн. записей. И что делать с таким результатом?
28 авг 13, 11:30    [14764875]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mind
Для такого запроса вам вообще не нужны индексы на т1.

Glory
По т1 индексов не надо

Если смотреть прямо на предложенный запрос, то надо кластерный индекс на id. Чтобы оптимизатор смог выбрать merge join.
28 авг 13, 11:52    [14765031]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
Гость333
Mind
Для такого запроса вам вообще не нужны индексы на т1.

Glory
По т1 индексов не надо

Если смотреть прямо на предложенный запрос, то надо кластерный индекс на id. Чтобы оптимизатор смог выбрать merge join.



Я думаю повесить на все таблицы

CREATE INDEX [] ON [dbo].[] ([id])
INCLUDE ([Date])
28 авг 13, 12:16    [14765174]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
кириллk
Я думаю повесить на все таблицы

CREATE INDEX [] ON [dbo].[] ([id])
INCLUDE ([Date])

И за 15млн записей сервер полезет в еще в таблицу ?
28 авг 13, 12:18    [14765197]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
Glory
кириллk
Я думаю повесить на все таблицы

CREATE INDEX [] ON [dbo].[] ([id])
INCLUDE ([Date])

И за 150млн записей сервер полезет в еще в таблицу ?


Почему он полезет?

у меня же join использует только Date и ID
28 авг 13, 12:37    [14765336]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
кириллk
Почему он полезет?

у меня же join использует только Date и ID

А "select *" что использует?
28 авг 13, 12:49    [14765412]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
Гость333
кириллk
Почему он полезет?

у меня же join использует только Date и ID

А "select *" что использует?


Я не понял вопрос :)
28 авг 13, 12:52    [14765436]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
кириллk
Гость333
пропущено...

А "select *" что использует?


Я не понял вопрос :)
Что ж непонятного!
Звёздочка - это "все поля".
Откуда сервер возьмёт значения всех полей в отобранных записях?
В таблицу полезет - вот откуда! А не в индекс, например.
28 авг 13, 12:58    [14765478]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
кириллk
Гость333
пропущено...

А "select *" что использует?


Я не понял вопрос :)

В ваших таблицах, кроме столбцов ID и DATE, ещё какие-нибудь столбцы есть?
28 авг 13, 13:01    [14765492]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
iap
кириллk
пропущено...


Я не понял вопрос :)
Что ж непонятного!
Звёздочка - это "все поля".
Откуда сервер возьмёт значения всех полей в отобранных записях?
В таблицу полезет - вот откуда! А не в индекс, например.


Если я Вас правильно понял

у меня таблица1 с 5 столбцами
значит я должен написать

CREATE INDEX [] ON [dbo].[таблица1 ] ([id])
INCLUDE ([Date], и перечислить все поля)?
28 авг 13, 13:02    [14765503]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
кириллk,

может, и так.
Но большинство считает, что писать звёздочку в SELECTе - это моветон!
28 авг 13, 13:05    [14765523]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
iap
кириллk,

может, и так.
Но большинство считает, что писать звёздочку в SELECTе - это моветон!


Я написал звездочку для упрощения, В запросе я разумеется перечисляю нужные мне поля
28 авг 13, 13:07    [14765541]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
кириллk,


Я нашел хорошую статью
https://www.sql.ru/articles/mssql/2007/051103hashjoin.shtml#0

У кого нить есть ссылка про преимущества и недостатки join (hash match итд )
28 авг 13, 14:47    [14766358]     Ответить | Цитировать Сообщить модератору
 Re: Индекс и даты  [new]
кириллk
Member

Откуда:
Сообщений: 1058
кириллk
кириллk,


Я нашел хорошую статью
https://www.sql.ru/articles/mssql/2007/051103hashjoin.shtml#0

У кого нить есть ссылка про преимущества и недостатки join (hash match итд )


http://www.t-sql.ru/post/JoinHints.aspx
28 авг 13, 15:43    [14766743]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить