2009-11-11 30 views
1

我們對索引使用了一種相當直接的命名標準,我可以通過編程來進行驗證,但是我正在使用INCLUDE列來命名索引。如果我根據一個簡單的公式來完成,那麼過於容易地構建名稱太長的名稱。然後我的程序驗證失敗了,最後我截掉了名字。INCLUDE索引的命名標準?

對於那些使用INCLUDE列的人,你有沒有想到一個你滿意的命名標準?如果是這樣,請分享。

我現在的標準,我不是很滿意:

IX_<tableName>_<column1>_..._<columnN>_wInclwIncl意爲「與包括」)

的問題是,有沒有都包含哪些列指示。

回答

2

我不會真的添加所有這些信息索引名稱...

我通常有是

  • PK_(table)主鍵索引
  • IXnn_(table)_(indexname)定期非聚集索引
  • UIXnn_(table)_(indexname)對於常規非聚類唯一索引
  • CIXnn_(table)_(indexname) for clus (如果它與PK不一樣)

這對我的情況已經足夠好了 - 如果你想明確指出非聚集索引也包含了列,那麼你可能需要思考一個新的前綴(而不是IX) - 但我不會太過分並將所有包含的列添加到名稱中 - 太多的信息!

如果你需要看到的是在索引哪些列,以及是否要包含的列與否,查詢系統目錄視圖:

SELECT 
    OBJECT_NAME(i.object_id) 'Table name', 
    i.name 'Index name', 
    i.type_desc 'Index type', 
    i.is_unique , 
    i.is_primary_key , 
    i.is_unique_constraint , 
    c.Name 'Column name', 
    ic.is_included_column 
FROM 
    sys.indexes i 
INNER JOIN 
    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id 
INNER JOIN 
    sys.columns c ON ic.column_id = c.column_id AND ic.object_id = c.object_id 
WHERE 
    i.Name = '(your index name in question)' 

馬克

1

如果你真的想包括在指標名的列名,你可以簡單地使用相同的列命名結構:

IX_<table>_<col1>..._...<colN>_INCL_<col1>..._...<colN> 

如果過長,則對於包含的列,你可以使用序號inste名稱廣告。 (或者,也許你可以調查爲什麼你包括那麼多的列,你超過了標識符的長度,或者你的列命名標準是否過於冗長)。

但是,您始終可以從目錄視圖中獲取包含的列,因此我不確定爲什麼您希望僅在名稱中如此明確。我不記得一個場景,我總是並且絕對想通過單獨查看名字來了解索引的每個可能的細節。對於包含的列,我認爲當您處於「需要了解」的情況時,可以手動查看它們。