我是代理键的粉丝。我的发现存在确认偏倚的风险。
我在这里和http://stackoverflow.com 上看到的许多问题都使用自然键而不是基于IDENTITY()
值的代理键。
我的计算机系统背景告诉我,对整数执行任何比较运算都比比较字符串快。
这个评论让我怀疑我的信念,所以我想我会创建一个系统来研究我的论点,即整数比字符串更快,用作 SQL Server 中的键。
由于小数据集可能几乎没有可辨别的差异,我立即想到了一个两表设置,其中主表有 1,000,000 行,而辅助表在主表中的每一行有 10 行,总共有 10,000,000 行。次要表。我的测试的前提是创建两组这样的表,一组使用自然键,一组使用整数键,并在简单的查询上运行计时测试,例如:
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.Key = Table2.Key;
Run Code Online (Sandbox Code Playgroud)
以下是我作为测试台创建的代码:
USE Master;
IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1
BEGIN
ALTER DATABASE NaturalKeyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE NaturalKeyTest;
END
GO
CREATE DATABASE NaturalKeyTest
ON (NAME = 'NaturalKeyTest', FILENAME =
'C:\SQLServer\Data\NaturalKeyTest.mdf', SIZE=8GB, FILEGROWTH=1GB)
LOG ON (NAME='NaturalKeyTestLog', FILENAME =
'C:\SQLServer\Logs\NaturalKeyTest.mdf', SIZE=256MB, FILEGROWTH=128MB); …
Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 surrogate-key natural-key performance-testing
我一直在 AdventureWorks2012 数据库中挖掘并看到在几个表中使用的 Row_GUID。
我的问题有两个部分:
何时应该包含 Row_GUID 列?
Row_GUID 列的用途和好处是什么?