比較 GUID 和 uniqueidentifier 值
SQL Server 中的全域唯一識別碼 (GUID) 資料類型會以 uniqueidentifier
資料類型來表示,它會儲存 16 位元組的二進位值。 GUID 是二進位數字,主要當成識別項使用,在許多電腦位於許多站台上的網路中,該識別項必須是唯一的。 GUID 可藉由呼叫 Transact-SQL NEWID 函數來產生,並保證在全世界都是唯一的。 如需詳細資訊,請參閱 uniqueidentifier (Transact-SQL)。
使用 SqlGuid 值
由於 GUID 值很長且難理解,因此它們對使用者而言不具任何意義。 如果會針對索引鍵值使用隨機產生的 GUID,而且您插入了大量資料列,則您會在索引中取得隨機的 I/O,這可能會對效能產生負面影響。 相較於其他資料類型,GUID 也相對較大。 一般來說,我們建議僅針對範圍非常侷限且不適用其他資料類型的案例使用 GUID。
比較 GUID 值
比較運算子可以搭配使用 uniqueidentifier
值。 不過排序並不是比較兩值的位元模式加以實作的。 uniqueidentifier
值允許的運算只有比較 (=、<>、<、>、<=、>=),以及檢查其是否為 NULL (IS NULL 及 IS NOT NULL)。 不允許其他算術運算子。
Guid 和 SqlGuid 都具有 CompareTo
方法,可用來比較不同的 GUID 值。 不過,System.Guid.CompareTo
和 SqlTypes.SqlGuid.CompareTo
的實作方式不同。 SqlGuid 會使用 SQL Server 行為來實作 CompareTo
,值的最後六個位元組最重要。 Guid 會評估所有的 16 個位元組。 下列範例示範這項行為差異。 程式碼的第一個區段會顯示未排序的 Guid 值,而程式碼的第二個區段會顯示已排序的 Guid 值。 第三個區段則會顯示已排序的 SqlGuid 值。 輸出會顯示於程式碼清單下方。
using System.Data.SqlTypes;
using System.Collections;
class Program
{
static void Main()
{
WorkWithGuids();
Console.ReadLine();
}
private static void WorkWithGuids()
{
// Create an ArrayList and fill it with Guid values.
ArrayList guidList = new ArrayList();
guidList.Add(new Guid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"));
guidList.Add(new Guid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"));
guidList.Add(new Guid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE"));
// Display the unsorted Guid values.
Console.WriteLine("Unsorted Guids:");
foreach (Guid guidValue in guidList)
{
Console.WriteLine(" {0}", guidValue);
}
Console.WriteLine("");
// Sort the Guids.
guidList.Sort();
// Display the sorted Guid values.
Console.WriteLine("Sorted Guids:");
foreach (Guid guidSorted in guidList)
{
Console.WriteLine(" {0}", guidSorted);
}
Console.WriteLine("");
// Create an ArrayList of SqlGuids.
ArrayList sqlGuidList = new ArrayList();
sqlGuidList.Add(new SqlGuid("3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE"));
sqlGuidList.Add(new SqlGuid("2AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE"));
sqlGuidList.Add(new SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE"));
// Sort the SqlGuids. The unsorted SqlGuids are in the same order
// as the unsorted Guid values.
sqlGuidList.Sort();
// Display the sorted SqlGuids. The sorted SqlGuid values are ordered
// differently than the Guid values.
Console.WriteLine("Sorted SqlGuids:");
foreach (SqlGuid sqlGuidValue in sqlGuidList)
{
Console.WriteLine(" {0}", sqlGuidValue);
}
}
}
這個範例會產生下列結果。
Unsorted Guids:
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee
Sorted Guids:
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee
Sorted SqlGuids:
2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee
3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee
1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee
後續步驟
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: