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

Откуда:
Сообщений: 81
например есть
declare @tt table
	(
		ID smallint, 
		StreetName varchar(50),
		House varchar(50),
		Flat varchar(50)
	)


можно ли создать составной индекс на поля StreetName, House та Flat?
10 янв 12, 12:47    [11878040]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
declare @tt table
	(
		ID smallint, 
		StreetName varchar(50),
		House varchar(50),
		Flat varchar(50)
        , unique ( -- или primary key
            StreetName
            , House
            , Flat
            /* , ID    -- если не нужна уникальнсть, добавить в индекс */
        )
	)


Сообщение было отредактировано: 10 янв 12, 12:52
10 янв 12, 12:50    [11878064]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
last_student
Member

Откуда:
Сообщений: 81
Гавриленко Сергей Алексеевич,

спасибо.
10 янв 12, 13:30    [11878391]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
не понял,
а ограничение UNIQUE создает разве индекс?
вроде автор спрашивал можно ли создать составной индекс на поля таблицы-переменной.
на таблицы переменные - нет, нельзя создать индекс, за исключением кластерного.
10 янв 12, 14:34    [11878912]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
libru
Member

Откуда:
Сообщений: 877
Slava_Nik
а ограничение UNIQUE создает разве индекс?
да
10 янв 12, 14:36    [11878939]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
libru
Slava_Nik
а ограничение UNIQUE создает разве индекс?
да

смотрю BOL по табличным переменным -На переменных table нельзя создавать индексы и статистику. В некоторых случаях можно добиться повышения производительности за счет использования вместо табличных переменных временных таблиц, которые позволяют создавать индексы и вести статистический учет. Дополнительные сведения о временных таблицах см. в разделе Инструкция CREATE TABLE (Transact-SQL).
, а на Create table как раз и написано , что UNIQUE создает индекс.
но у него -то переменная
10 янв 12, 14:41    [11878996]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
libru
Member

Откуда:
Сообщений: 877
забей ее данными, сделай select к этой переменной с селективным условием на это поле и глянь план
наверняка увидишь в плане доступ к индексу
10 янв 12, 14:46    [11879044]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
libru
забей ее данными, сделай select к этой переменной с селективным условием на это поле и глянь план
наверняка увидишь в плане доступ к индексу

данными не обязательно забивать
create table t001(
id int not null,
name nvarchar(32),
age varchar(3),
lvl varchar(34),
unique (name,age,lvl))
GO

select * from sys.indexes
where object_id = object_id('t001') and is_unique = 1
GO
10 янв 12, 14:51    [11879092]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
gds, там именно про табличные переменные речь шла
но все равно, после объявления @tt каким-то таким образом можно увидеть картинку

select si.object_id, si.name, si.type_desc, co.name
from tempdb.sys.indexes si
join tempdb.sys.columns co on co.object_id = si.object_id
where co.name = 'streetname'
10 янв 12, 14:54    [11879113]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Shakill, запрос упрощенный, только чтобы добраться до object_id переменной (при условии что в темпдб больше нет таблиц с полем streetname :) )
10 янв 12, 14:56    [11879131]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Slava_Nik
не понял,
а ограничение UNIQUE создает разве индекс?

Все уникальные констрейнты физически обеспечиваются уникальным индексом. Не верите - смотрите план.
10 янв 12, 14:57    [11879139]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
До кучи проверялка достаточно упрощенная, но вполне подходящая :
declare @tt table
	(
		ID smallint, 
		StreetName varchar(50),
		House varchar(50),
		Flat varchar(50)
        , unique ( -- или primary key
            StreetName
            , House
            , Flat
            /* , ID    -- если не нужна уникальнсть, добавить в индекс */
        )
	)


SELECT * FROM tempdb..sysobjects WHERE crdate BETWEEN DATEADD(second,-1,GETDATE()) AND DATEADD(second,1,GETDATE())
10 янв 12, 15:20    [11879374]     Ответить | Цитировать Сообщить модератору
 Re: составной индекс на переменную типа таблицы  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
Да и так же видно всё:
declare
  @t table (
    n int not null unique,
    name nvarchar(128)
  );
begin
  insert into @t select object_id,name from sys.all_objects;
  set statistics profile on;
  select * from @t where n=50;
  set statistics profile off;
end;


select * from @t where n=50;
|--Nested Loops(Inner Join, OUTER REFERENCES:([Bmk1000]))
|--Index Seek(OBJECT:(@t), SEEK:([n]=(50)) ORDERED FORWARD)
|--RID Lookup(OBJECT:(@t), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD)
10 янв 12, 15:47    [11879653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить