Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список индексов запросом. / 15 сообщений из 15, страница 1 из 1
30.11.2004, 11:21
    #32805318
www.perlscript.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Пытаюсь получить список индексов в базе данных запросом в виде таблицы из трех колонок - Таблица, Индекс, Номер по порядку.
Код: plaintext
1.
2.
3.
4.
SELECT     sysobjects.name AS Таблица, sysindexes.name AS Индекс, sysindexes.indid AS Номер
FROM         sysobjects INNER JOIN
                      sysindexes ON sysobjects.id = sysindexes.id
WHERE     (sysobjects.xtype = 'U') AND (sysindexes.indid >  0 )
ORDER BY sysobjects.name, sysindexes.indid
В результате кроме существующих индексов идут непонятные записи:
_WA_Sys_OBJID_7E679D53
Я так понимаю - это похоже на статистику
как мне убрать все лишнее?
...
Рейтинг: 0 / 0
30.11.2004, 11:33
    #32805352
Smirnov Anton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
да, это действительно статистика, которая автоматически собирается по некоторым столбцам таблиц сервером
можно воспользоваться тем, что указатель на корневую страницу индекса для статистики всегда равен 0
...
Рейтинг: 0 / 0
30.11.2004, 11:33
    #32805353
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Воспользуйтесь функцией INDEXPROPERTY()
...
Рейтинг: 0 / 0
30.11.2004, 11:37
    #32805366
Alex Antonoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
...
Рейтинг: 0 / 0
30.11.2004, 11:44
    #32805378
www.perlscript.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Alex Antonoffselect * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
Не подходит - дает только первичные ключи - они же кластерные индексы
...
Рейтинг: 0 / 0
30.11.2004, 11:49
    #32805392
www.perlscript.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Smirnov Antonда, это действительно статистика, которая автоматически собирается по некоторым столбцам таблиц сервером
можно воспользоваться тем, что указатель на корневую страницу индекса для статистики всегда равен 0
а как это проверить?
...
Рейтинг: 0 / 0
30.11.2004, 11:54
    #32805407
www.perlscript.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Все, вот так получилось.
Код: plaintext
1.
2.
3.
4.
SELECT     o.name AS Таблица, i.name AS Индекс, i.indid AS Номер
FROM         sysobjects o INNER JOIN
                      sysindexes i ON o.id = i.id
WHERE     (o.xtype = 'U') AND (i.indid >  0 ) AND (i.indid <  255 ) AND (INDEXPROPERTY(i.id, i.name, 'isStatistics') =  0 )
ORDER BY o.name, i.indid
...
Рейтинг: 0 / 0
30.11.2004, 11:59
    #32805420
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
1. INDEXPROPERTY (a.id, a.name, 'IsAutoStatistics') - это тоже надо проверять
2. (i.indid > 0) AND (i.indid < 255) - это нет смысла проверять при использовании INDEXPROPERTY
3. (o.xtype = 'U') - лучше заменить на OBJECTPROPERTY(o.id,'IsTable')
...
Рейтинг: 0 / 0
30.11.2004, 12:24
    #32805488
www.perlscript.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Glory1. INDEXPROPERTY (a.id, a.name, 'IsAutoStatistics') - это тоже надо проверять
2. (i.indid > 0) AND (i.indid < 255) - это нет смысла проверять при использовании INDEXPROPERTY
3. (o.xtype = 'U') - лучше заменить на OBJECTPROPERTY(o.id,'IsTable')

я так понял, что не надо 1 проверять.
Код: plaintext
1.
2.
3.
IsStatistics Index was created by the CREATE STATISTICS statement or by the auto create statistics option of sp_dboption. Statistics indexes are used as a placeholder for column-level statistics. 
 1  = True
 0  = False
NULL = Invalid input
...
Рейтинг: 0 / 0
30.11.2004, 12:38
    #32805542
www.perlscript.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
Да, а второй пункт убрал, действительно не нужен.
...
Рейтинг: 0 / 0
30.11.2004, 12:53
    #32805574
Sphinx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
sp_MSHelpIndex 'table_name' , null , 1
Простенько и со вкусом.
Передо мной стояла задача снять структуру базы в общем, для отображения индексов использовал данную процедуру. В BOL не пытайтесь искать так как это недокументированная процедура, я с ней разбирался чисто экспериментальным путем. Что то по ней было также в расылке "SQL дело тонкое".
...
Рейтинг: 0 / 0
30.11.2004, 13:02
    #32805601
Crimean
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
А я бы посмотрел в sp_helpindex ... Там без INDEXPROPERTY все происходит... Местами удобнее.
...
Рейтинг: 0 / 0
14.01.2005, 15:53
    #32865466
Gena G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
А куда подевалось мое сообщение из этой темы?
...
Рейтинг: 0 / 0
15.01.2005, 01:39
    #32866074
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
а я бы убрал join с sysobjects. для получения имени таблицы можно использовать object_name(id) :), а для проверки того, что объект действительно таблица - objectproperty()

2www.perlscript.ru
авторНе подходит - дает только первичные ключи - они же кластерные индексы В общем случае, это не верно, т.к. вернутся все ограничения на таблицы, за исключением DEFAULT. Не верно так же и то, что кластерный индекс и первичный ключ - одно и то же.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.08.2020, 13:37
    #39992249
Petlyanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список индексов запросом.
2ALL, на оффсайте есть такая инструкция

https://docs.microsoft.com/ru-ru/sql/relational-databases/system-catalog-views/sys-indexes-transact-sql?view=sql-server-ver15

в таком виде выведет все индексы для бд

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
USE DB_Name
GO

SELECT i.name AS index_name  
    ,i.type_desc  
    ,is_unique  
    ,ds.type_desc AS filegroup_or_partition_scheme  
    ,ds.name AS filegroup_or_partition_scheme_name  
    ,ignore_dup_key  
    ,is_primary_key  
    ,is_unique_constraint  
    ,fill_factor  
    ,is_padded  
    ,is_disabled  
    ,allow_row_locks  
    ,allow_page_locks  
FROM sys.indexes AS i  
INNER JOIN sys.data_spaces AS ds ON i.data_space_id = ds.data_space_id  
WHERE is_hypothetical = 0 AND i.index_id <> 0   
GO
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список индексов запросом. / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]