powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список индексов запросом.
15 сообщений из 15, страница 1 из 1
Как получить список индексов запросом.
    #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
Как получить список индексов запросом.
    #32805352
Smirnov Anton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, это действительно статистика, которая автоматически собирается по некоторым столбцам таблиц сервером
можно воспользоваться тем, что указатель на корневую страницу индекса для статистики всегда равен 0
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32805353
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользуйтесь функцией INDEXPROPERTY()
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32805366
Alex Antonoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32805378
www.perlscript.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Antonoffselect * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
Не подходит - дает только первичные ключи - они же кластерные индексы
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32805392
www.perlscript.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Smirnov Antonда, это действительно статистика, которая автоматически собирается по некоторым столбцам таблиц сервером
можно воспользоваться тем, что указатель на корневую страницу индекса для статистики всегда равен 0
а как это проверить?
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #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
Как получить список индексов запросом.
    #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
Как получить список индексов запросом.
    #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
Как получить список индексов запросом.
    #32805542
www.perlscript.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, а второй пункт убрал, действительно не нужен.
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32805574
Sphinx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sp_MSHelpIndex 'table_name' , null , 1
Простенько и со вкусом.
Передо мной стояла задача снять структуру базы в общем, для отображения индексов использовал данную процедуру. В BOL не пытайтесь искать так как это недокументированная процедура, я с ней разбирался чисто экспериментальным путем. Что то по ней было также в расылке "SQL дело тонкое".
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32805601
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы посмотрел в sp_helpindex ... Там без INDEXPROPERTY все происходит... Местами удобнее.
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32865466
Gena G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А куда подевалось мое сообщение из этой темы?
...
Рейтинг: 0 / 0
Как получить список индексов запросом.
    #32866074
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я бы убрал join с sysobjects. для получения имени таблицы можно использовать object_name(id) :), а для проверки того, что объект действительно таблица - objectproperty()

2www.perlscript.ru
авторНе подходит - дает только первичные ключи - они же кластерные индексы В общем случае, это не верно, т.к. вернутся все ограничения на таблицы, за исключением DEFAULT. Не верно так же и то, что кластерный индекс и первичный ключ - одно и то же.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как получить список индексов запросом.
    #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
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список индексов запросом.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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