有没有理由不在数据库表的索引上使用auto_increment?

gol*_*les 7 mysql auto-increment

我继承了维护一个编码很差的电子商务网站的任务,我正在努力重构很多代码并尝试修复持续存在的错误.

每个数据库插入(将项目添加到购物车等)都以grab_new_id函数开始,该函数COUNT表中的行数,然后,从该数字开始,查询数据库以查找未使用的索引号.除了性能非常糟糕(已经有40,000多行,并且索引被定期删除,所以有时只需要几秒钟才能找到一个新的id)这会在两个操作同时执行时定期中断,因为添加了两个条目具有重复的ID号.

这对我来说似乎很愚蠢 - 为什么不在索引字段上使用自动增量?我已经对它进行了两种测试,并且在没有指定索引ID的情况下向表中添加行(显然)要快很多倍.我的问题是:任何人都可以想到原始程序员可能做到这一点的任何原因吗?是否有一些思想流派将auto_increment视为不良形式?是否有没有自动增量功能的数据库?

the*_*ent 8

我之前从一个不知道该功能存在的人那里看过这个.绝对使用自动增量功能.

有些人会采用"自己动手"的方式处理所有事情,通常是因为他们没有花时间去查看这是否是一个可用的功能,或者其他人是否已经提出它.您经常会看到这些人疯狂的变通办法或表现不佳/脆弱的代码.继承糟糕的数据库根本不好玩,祝你好运!

  • 我曾经遇到过一个名为reverseBoolean的C#函数.它所做的就是接受一个布尔值作为参数并返回相反的结果.它过于复杂,只是简单的愚蠢.所有这些都是因为开发人员不知道not运算符. (2认同)
  • 我曾经看到代码运行在对Web应用程序发出的每个请求上,如果在数据库中设置了标志,则会强制所有流量进入https.它将与IIS在https上的自动处理作斗争并创建一个无限重定向循环.在我们发现发生了什么事之前,我们已经过了2天了. (2认同)

HLG*_*GEM 5

正如我所理解的那样,Oracle有序列但不是自动生成的ID.但是,通常这种东西是由那些不了解数据库编程并且不愿意看到数据缺口的开发人员完成的(当你从回滚中获得).还有人喜欢创建id,因此他们可以将它用于子表,但是大多数具有自动生成ID的数据库也有一种方法可以在创建时将该id返回给用户.