首頁 > 資料庫 > mysql教程 > SQL Server 不同版本中表格變數的索引功能有何變化?

SQL Server 不同版本中表格變數的索引功能有何變化?

Barbara Streisand
發布: 2025-01-12 21:41:47
原創
443 人瀏覽過

How Have Indexing Capabilities for Table Variables Changed in SQL Server Across Different Versions?

SQL Server 表變數索引:SQL Server 2000 與現代版本的比較

SQL Server 2014 及更高版本

在 SQL Server 2014 及更高版本中,可以在聲明表變數時直接內聯指定非唯一索引:

<code class="language-sql">DECLARE @T TABLE (
C1 INT INDEX IX1 CLUSTERED,
C2 INT INDEX IX2 NONCLUSTERED,
INDEX IX3 NONCLUSTERED(C1,C2)
);</code>
登入後複製

SQL Server 2016 進一步允許對錶變數使用過濾索引:

<code class="language-sql">DECLARE @T TABLE
(
c1 INT NULL INDEX ix UNIQUE WHERE c1 IS NOT NULL
)</code>
登入後複製

SQL Server 2000-2012

在 SQL Server 2000-2012 中,只能透過約束來為表格變數建立索引:

<code class="language-sql">DECLARE @TEMPTABLE TABLE (
  [ID]   [INT] NOT NULL PRIMARY KEY,
  [Name] [NVARCHAR] (255) COLLATE DATABASE_DEFAULT NULL,
  UNIQUE NONCLUSTERED ([Name], [ID]) 
  ) </code>
登入後複製

傳統上,表具有聚集索引或是非聚集堆:

  • 聚集索引:

    • 可以是唯一索引或非唯一索引(SQL Server 會為重複項新增唯一識別碼)。
    • 可以透過使用約束指定 CLUSTERED/NONCLUSTERED 來覆寫。
  • 非聚集索引:

    • 可以是唯一索引或非唯一索引(SQL Server 會為非唯一索引新增行定位器)。
    • 也可像聚集索引一樣被覆蓋。

在表格變數上實作索引

在 SQL Server 2000-2012 中,可以透過約束隱式建立下列類型的表變數索引:

索引类型 能否创建
唯一聚集索引
非聚集堆上的唯一索引
聚集索引上的唯一非聚集索引

例如,原始範例中 Name 欄位上的非唯一非聚集索引可以透過 Name 和 ID 上的唯一索引來模擬:

<code class="language-sql">DECLARE @TEMPTABLE TABLE (
     [ID] [int] NOT NULL PRIMARY KEY
    ,[Name] [nvarchar] (255) COLLATE DATABASE_DEFAULT NULL 
)</code>
登入後複製

以上是SQL Server 不同版本中表格變數的索引功能有何變化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板