有人在用作数据库内的主键时曾经测量过顺序向导与标准向导的性能吗?
我看不到是否需要唯一键,从Web UI或其他部分传递它们本身似乎是一种不好的做法,如果您有安全方面的问题,我不知道如何使用GUID。可以改善情况(如果这是问题,请使用使用框架的适当加密功能的真实随机数生成器)。我的方法涵盖了其他项目,可以从代码生成顺序的guid,而无需DB访问(即使仅对于Windows),并且在时间和空间上是唯一的。是的,提出这个问题的目的在于回答那些选择了Guid作为其PK的人们以改善数据库使用率的方式(在我的情况下,这使客户能够承受更大的工作量而不必更换服务器)。看来,安全性问题很多,在这种情况下,请不要使用Sequential Guid,或者最好不要使用标准GUId作为PK,这些PK是从UI来回传递的,而sequential guid用于其他所有操作。一如既往没有绝对的真理,我也编辑了主要答案来反映这一点。
GUID与顺序GUID
一种典型的模式是将Guid用作表的PK,但是,如其他讨论中所提及(请参见Advantages and disadvantages of GUID / UUID database keys)有一些性能问题。这是典型的Guid序列
f3818d69-2552-40b7-a403-01a6db4552f77ce31615-fafb-42c4-b317-40d21a6a3c6094732fc7-768e-4cf2-9107-f0953f6795a5这种数据的问题是:
可能的解决方案是使用顺序引导,其生成如下:cc6466f7-1066-11dd-acb6-005056c00008cc6466f8-1066-11dd-acb6-005056c00008cc6466f9-1066-11dd-acb6-005056c00008
如何从C#代码生成它们:
[DllImport("rpcrt4.dll", SetLastError = true)] static extern int UuidCreateSequential(out Guid guid); public static Guid SequentialGuid() { const int RPC_S_OK = 0; Guid g; if (UuidCreateSequential(out g) != RPC_S_OK) return Guid.NewGuid(); else return g; }
好处
现实生活中的测量:
实验室测试– SQL ServerVS2008测试,10个并发用户,没有思考时间,基准测试过程,分批插入600个叶表标准向导
我可能在这里丢失了一些东西(如果可以的话,请随时纠正我,但是我发现对主键使用顺序的GUID / UUID几乎没有好处。
需要