假设Table1包含列orderid(不是键,尽管它不是NULL且唯一)。它包含5位数字。生成不在该列中的php var $unique_var的最佳方法是什么?重要的是,表中有10%到30%的5位数(所以生成一个数字并检查while (mysql_num_rows() ==0) {}
不是找到一个数字的最佳方法,是否有更好的性能解决方案?)
谢谢。
如果只有 10-30%的数字已经被取走-那么这意味着只有 10-30%的查询将至少执行两次。这根本不是一个大的性能问题。
否则-只需创建所有5位数的数字列表表(只有100k行)并删除所有存在的。当您需要另一个随机数时-只需选择一个并删除。
我建议找到最大的数字(与MAX()子句),并从那里开始。
这里有一些建议。每种方法都有其缺点。
- 预填充表并添加一列以指示某个数字未使用。使用
LIMIT = 1
选择一个未使用的号码,并将其标记为已使用。这会占用很多空间。 - 保留一个单独的表包含以前使用的数字。如果该表为空,则从最后使用的数字依次生成数字(如果表1为空,则从00001生成)。这需要一些额外的簿记。