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

Откуда: Israel
Сообщений: 995
С одной стороны вроде он итак там есть.
с другой стороны получается вроде лучше и оптимайзеры больше нравиться...
Торможу? может кто объяснит?

set statistics io on
GO

IF OBJECT_ID('tmp') IS NOT NULL
	DROP TABLE tmp
GO

CREATE TABLE tmp(a1 INT PRIMARY KEY, a2 INT)
GO
INSERT INTO tmp SELECT ROW_NUMBER() OVER (ORDER BY a.object_id), checksum(b.object_id) FROM sys.objects a, sys.objects b
GO

CREATE INDEX IX_tmp_a2 ON tmp (a2)
GO

CREATE  INDEX IX_tmp_a2_1 ON tmp(a2) INCLUDE(a1) 
GO

SELECT a1 FROM tmp WHERE a2 = 23432432
25 окт 09, 14:19    [7835423]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
iljy
Member

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

А в чем собственно вопрос? У вас оптимизатор из 2х эквивалетных (а точнее - просто одинаковых) индексов выбирает второй, если вы его удалите - будет брать 1й, статистика чтений при этом не меняется.
25 окт 09, 14:35    [7835453]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
aleks2
Guest
EvAlex
С одной стороны вроде он итак там есть.
с другой стороны получается вроде лучше и оптимайзеры больше нравиться...
Торможу? может кто объяснит?
[/src]


1. Где вы та узрили кластерный индекс?
2. Кластерный индекс никуда включить НИЗЗЯ. Он либо есть, либо его нет.
Чисто умозрительно его (кластерный индекс) можно представить как
CREATE  INDEX IX_clustered ON tmp(field1, field2, ...) INCLUDE(все остальное, шо есть в таблице) 
3. Естественно, для
SELECT a1 FROM tmp WHERE a2 = 23432432
лучше
CREATE  INDEX IX_tmp_a2_1 ON tmp(a2) INCLUDE(a1) 
Ибо читать придется ТОЛЬКО индекс.
25 окт 09, 14:43    [7835467]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
EvAlex
Member

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

А в чем собственно вопрос? У вас оптимизатор из 2х эквивалетных (а точнее - просто одинаковых) индексов выбирает второй, если вы его удалите - будет брать 1й, статистика чтений при этом не меняется.


Вот и я про это не меняется, так как из за того что row locator в индексе и есть clustered index key?
И получается что в INCLUDE никогда нет смысла добавлять поля из кластерного индекса?
25 окт 09, 16:46    [7835607]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
iljy
Member

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

А в чем собственно вопрос? У вас оптимизатор из 2х эквивалетных (а точнее - просто одинаковых) индексов выбирает второй, если вы его удалите - будет брать 1й, статистика чтений при этом не меняется.


Вот и я про это не меняется, так как из за того что row locator в индексе и есть clustered index key?
И получается что в INCLUDE никогда нет смысла добавлять поля из кластерного индекса?

именно так.
25 окт 09, 16:53    [7835621]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
aleks2
Guest
iljy
EvAlex
iljy
EvAlex,

А в чем собственно вопрос? У вас оптимизатор из 2х эквивалетных (а точнее - просто одинаковых) индексов выбирает второй, если вы его удалите - будет брать 1й, статистика чтений при этом не меняется.


Вот и я про это не меняется, так как из за того что row locator в индексе и есть clustered index key?
И получается что в INCLUDE никогда нет смысла добавлять поля из кластерного индекса?

именно так.


Именно НЕ так.

1. Ибо если поле(я) выборки включены в индекс, то таблица (кластерный индекс) вопче НЕ используется.

2. Порядок полей индекса и кластерного индекса могут различаться - это учитывается оптимизатором.
25 окт 09, 17:48    [7835695]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
iljy
Member

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

1. Где вы та узрили кластерный индекс?
2. Кластерный индекс никуда включить НИЗЗЯ. Он либо есть, либо его нет.

Чувак, начни уже думать прежде чем говорить! Ну сколько можно!


Кризис пубертатного периода? Сочувствую... но помочь ничем не могу.

Ну и с чем конкретно ты не согласный?

Мда... Ладно, я тебе 2 раза расскажу.

DECLARE @i int = 1
WHILE @i <= 2
BEGIN
PRINT '1.
CREATE TABLE tmp(a1 INT PRIMARY KEY, a2 INT)
BOL
Для ограничений PRIMARY KEY по умолчанию создается кластеризованный индекс (CLUSTERED)
'
PRINT '2. Поля, являющиеся ключевыми для кластерного индекса, включаются в каждый создаваемый на таблице индекс в качестве ссылки на строку. Если кластерный индекс не является уникальным - он дополняется до уникального скрытым числовым значением. При этом никто не мешает включить поля, входящие в кластерный индекс, в любой другой индекс в виде INCLUDE-полей, хотя практического влияния на создаваемый некластерный индекс это не окажет.'
SET @i += 1
END
PRINT 'ДЗ:
1. Найти в BOL объяснения и примеры по пункту 2.
2. Выполнить приведенный в начальном посте топика скрипт, посмотреть описания индексов таблицы tmp и планы запросов, объяснить.'
25 окт 09, 18:02    [7835724]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36820
Хватит переходить на личности. Отношения выясняйте в личке или в ПТ.
26 окт 09, 11:21    [7837296]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Интересная статья на тему

Nonclustered Index Keys
26 окт 09, 11:38    [7837408]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс как часть INCLUDE  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гавриленко Сергей Алексеевич
Хватит переходить на личности. Отношения выясняйте в личке или в ПТ.

Прошу прощения, исправлюсь. Просто реально раздражает, когда человек выдает свои домыслы как истину в последней инстанции, и не в первый раз.


Кудряшка,
спасибо, почитаю как время будет:) Сейчас собираюсь в командировку, но инет там теперь есть:)
26 окт 09, 12:12    [7837601]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить