在DB中存储散列ID并获取它或在代码本身中创建散列ID并使用它?

时间:2014-08-01 21:00:30

标签: php mysql logic

我有两种处理散列ID的方法,但需要你的意见哪一个会比另一个更好,为什么?我对逻辑感兴趣,而不是我用于散列或表数据类型等的技术!

我将生成一个URL来处理删除产品,而URL将是这样的(最后一段是哈希(SHA1)product.id):

...../delete/product/123c45c789ds654dedkjfghr87frd

情景1: 在表中存储哈希ID,并使用它:

>查询:

DELETE ...... WHERE hash_id = '$url_hash_id'

>表

products
id - INT
hash_id - VARCHAR(40)

情景2: 不要在表中存储散列ID,而是在每次创建URL时生成它并使用它:

>查询:

DELETE ...... WHERE SHA1(id) = '$url_hash_id'

>表

products
id - INT

我能想到的是:

  1. 场景1 - 表变得更大(可能是整个数据库,因为我可能最终为所有表实现相同的列)但是哈希过程运行一次。
  2. 场景2 - 使用较少的表空间但mySql SHA1()功能和 每次我们需要时都会调用php SHA1()个函数。

1 个答案:

答案 0 :(得分:2)

我会使用方案1,因为WHERE SHA1(id) = '$url_hash_id'不会使用mysql索引。对于大量记录,表扫描会比存储hash_id和该列索引的额外开销更多地杀死你。