ID为second的两个查询比使用hash的查询更快吗?

时间:2015-09-05 18:39:03

标签: mysql sql optimization

我有一个包含两列iduniqueId的表格,uniqueId是使用PHP TEXT函数生成的uniqid字段。出于安全/隐私原因,用户永远不会在客户端获得实际的id

因此,常见的情况是用户可以通过他们拥有的uniqueId从另一个表中请求更多详细信息或子字段。

我的问题是这个,特别是我有一个查询将在表中查找50-100个条目,使用uniqueId执行查找是否更快,类似55ea74bc12a661.02727647,或者首先进行查询以找到原始ID(简单自动增量列),然后使用它执行查找?

1 个答案:

答案 0 :(得分:2)

你有两个问题。

  1. 用户使用long,' random',uniqueId来代码。你需要仔细查看。
  2. 在加入表格和进行其他查询时,您需要一个唯一的ID(iduniqueId)才能加入。
  3. 步骤1:uniqueId也可以是Users表的PRIMARY KEY。对于我的观点#2,它也可以有一个AUTO_INCREMENT id。 (更多的是一分钟。)作为PK实现了N.B.长大了。

    uniqueId VARCHAR(255) NOT NULL CHARACTER SET ascii,  -- not TEXT, not utf8
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(uniqueId),
    INDEX(id)  -- Yes, auto_inc will work with this
    

    这为您提供了从uniqueIdid的映射,以及第一个SELECT上的用户基本信息。

    第2步:现在,您将使用JOINing id到其他表格。或者使用SELECTs单独id。为什么不在任何地方简单地使用uniqueId?

    • id要小得多 - 只有4个字节。对比uniqueId - 最多257个字节。
    • "新"用户将拥有更高的"更高的" IDS。这将倾向于集群'活跃的用户在一起,使事物更容易缓存。 (我假设"年龄较大"用户大多从地球上掉下来。)