2009-09-02 3 views

ответ

7

Это должно охватывать то, что вы ищете. то есть таблицы, которые являются кучами (без кластеризованного индекса) и не имеют никаких некластеризованных индексов. Он использует новую систему. используемых в 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)) 
4
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.

+0

как я получить схему для этих объектов –

+0

они все еще действительны в 2005/2008 в качестве взглядов «совместимости».Я опубликовал свою собственную версию, которая использует системные объекты 2005/2008. –

+0

@Raj Больше, я обновил свой ответ с именем схемы по запросу –

4

В дополнение к предложению @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.
5

Вот пример:

select SCHEMA_NAME(schema_id), name from sys.tables 
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0 
Смежные вопросы