2009-09-02 10 views

答えて

7

これはあなたの探しているものをカバーする必要があります。つまり、ヒープ(クラスタ化されたインデックスなし)で、クラスタ化されていないインデックスを持たないテーブルです。それは新しいsysを使用します。 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) 

編集:
私が要求されるようにスキーマ名が含まれるようにSQLを更新しました。 this link.
This FAQは、より多くのサンプルが含まれている参照、

カタログ表は、SQL Serverのマニュアルに記載されています(私はSQL 2005で導入されたスキーマに対応するために代わりにsysobjectssys.objectsに持っていた注意してください)と有用かもしれない。

これらはシステムテーブルであり、可能であれば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に関する詳細な情報を返します。 tatsの - インデックスグループ
  • 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 
関連する問題