我并没有完全从Google分析中获得所有我想要的,所以我正在使自己的简单跟踪系统填补一些空白。索引一个“不可猜测”的密钥以便快速检索?
我有一个会话密钥,作为cookie发送给客户端。这是一个GUID。 我也有一个代理IDENTITY int列。
我将经常访问会话行以在客户端生命周期中对其进行更新。查找此会话行以进行更新是我关心的地方。
只送上我的GUID到客户端浏览器:
一)我不想我的技术“黑客” 用户能够瓜哥什么用户 ID',他们是 - 即知道有多少 观众我们不得不在总
b中的网站),我想,以确保没有人弄乱与恶意数据 - 没有人能猜对GUID
我知道GUID索引的效率不高,但我不确定究竟效率如何。我也不清楚如何最大限度地提高对同一行的多个更新的效率。
我不知道下面我应该做的:
- 指数GUID列,总是用它来找到该行
- 做一个表扫描基础上找到的GUID的行(假设最近的会议很容易找到)。通过反向日期顺序来做到这一点(如果可能的话!)
- 避免一个GUID索引并在我的活动会话应用层中保留一个散列表:
IDictionary<GUID, int>
允许从'非秘密中找到'秘密'身份代理键'GUID键。
每天可能会有几千个会话。
PS。我只是想更好地理解这方面的SQL方面。我知道我可以做其他聪明的事情,例如只在会话过期等时写入表格,但请保留与SQL /索引相关的答案。
所以事实上,没有'订单'的GUIDs不应该关心我。该索引知道123456比123455更新,但失去了GUID的知识。我猜索引行为就像一个哈希表,无论你是在一个GUID或整数列索引吗?即找到'块'或其它任何东西,并扫描所请求的特定项目。这是一个正确的假设吗? – 2009-05-24 08:15:53
索引是b树,而不是散列表。顺序无关紧要,Sql Server会将b-tree“走”到一个GUID和一个标识列。在步行结束时,它会找到对该行的引用(查找)。因此,您的假设是正确的。我在重新思考之后编辑了这篇文章。 :) – Andomar 2009-05-24 08:32:15