Как перечислить таблицы без индексов в моей базе данных SQL 2008?список таблиц без индексов в sql 2008
Редактировать
Я хочу, чтобы имя схемы и имя таблицы.
Как перечислить таблицы без индексов в моей базе данных SQL 2008?список таблиц без индексов в sql 2008
Редактировать
Я хочу, чтобы имя схемы и имя таблицы.
Это должно охватывать то, что вы ищете. то есть таблицы, которые являются кучами (без кластеризованного индекса) и не имеют никаких некластеризованных индексов. Он использует новую систему. используемых в 2005/2008 гг.
кроме того, вы, вероятно, хотите посмотреть на таблицы, которые действительно имеют кластерный индекс, но не имеют некластерные индексов (это вторая часть заявления, которое я закомментирую.
SELECT
schemaname = OBJECT_SCHEMA_NAME(o.object_id)
,tablename = o.NAME
FROM sys.objects o
INNER JOIN sys.indexes i ON i.OBJECT_ID = o.OBJECT_ID
-- tables that are heaps without any nonclustered indexes
WHERE (
o.type = 'U'
AND o.OBJECT_ID NOT IN (
SELECT OBJECT_ID
FROM sys.indexes
WHERE index_id > 0
)
)
-- OR
-- table that have a clustered index without any nonclustered indexes
--(o.type='U'
-- AND o.OBJECT_ID NOT IN (
-- SELECT OBJECT_ID
-- FROM sys.indexes
-- WHERE index_id>1))
select shema = s.name, table_name = o.name
from sys.objects o
join sys.schemas s on o.schema_id = s.schema_id
where type = 'U'
and not exists (select i.index_id
from sys.indexes i
where i.type <> 0 --ignore default heap index row
and o.object_id = i.object_id)
Edit:
Я обновил SQL включать имя схемы в соответствии с просьбой. (Обратите внимание, я должен был sys.objects вместо sysobjects для удовлетворения схем, которые были введены в SQL 2005)
В каталоге таблицы описаны в документации SQL Server см this link.
This FAQ содержит больше образцов и также может быть полезным.
Обратите внимание, что это системные таблицы и могут меняться между версиями SQL-сервера, где это возможно, вместо использования системных табличных независимых представлений, называемых Information Schema Views.
В дополнение к предложению @Philip Fourie вы можете подумать о том, какие индексы создавать.
После того как вы получаете доступ к своим данным, SQL Server 2008 отслеживает места, где он считает, что индексы будут полезны (это относится к ним как «отсутствующие индексы». Есть рука, полная новых динамически управляемых представлений, которые могут показывать эти недостающие индексы и некоторая информация о них
От MSSQlTips:.
- sys.dm_db_missing_index_details - Возвращают подробную информацию о пропавшем индексе
- sys.dm_db_missing_index_group_s Таты - Возвращает краткую информацию о пропавших без вести индекс группам
- sys.dm_db_missing_index_groups - Возвращает информацию о конкретной группе отсутствующих индексов
- sys.dm_db_missing_index_columns (index_handle) - Возвращает информацию о таблице базы данных столбцов, которые отсутствуют для индекса. Это функция и требуется передать index_handle.
Вот пример:
select SCHEMA_NAME(schema_id), name from sys.tables
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0
как я получить схему для этих объектов –
они все еще действительны в 2005/2008 в качестве взглядов «совместимости».Я опубликовал свою собственную версию, которая использует системные объекты 2005/2008. –
@Raj Больше, я обновил свой ответ с именем схемы по запросу –