学生表里有一个考试号,每个学生的考试号都是程序生成的不重复的8位随机数。
现在保证插入学生表的数据,考试号和数据库中已经存在的学生的考试号不重复的算法是这样的。先生成一个8位的随机数,然后于查找学生表是否存在这个考试号,如果存在就重新生成一个随机数,再次比较,直到满足条件。现在的学生表数据量很大。超过百万,所以每次生成随机数比对的操作都特别的慢。建了索引的情况下,有时插入一条新的学生数据还得10秒。请问这个问题应该如何解决,或者有更好的处理方式,每次插入的学生号不能有顺序,不能用自动增长列。
现在保证插入学生表的数据,考试号和数据库中已经存在的学生的考试号不重复的算法是这样的。先生成一个8位的随机数,然后于查找学生表是否存在这个考试号,如果存在就重新生成一个随机数,再次比较,直到满足条件。现在的学生表数据量很大。超过百万,所以每次生成随机数比对的操作都特别的慢。建了索引的情况下,有时插入一条新的学生数据还得10秒。请问这个问题应该如何解决,或者有更好的处理方式,每次插入的学生号不能有顺序,不能用自动增长列。
觉得这句说得比较有道理,只要选择是不按顺序就可以了。
不知道这样设计的初衷是什么, 是不是只是为了把学生号打乱呀?一次把几百万的学生打乱,不知道怎么会有这个需求?通常在实际上,学生是会分区,只要在一个分区内的打乱就可以了。几千的数据应该够了。也就是说,可不可以考虑,把几百万的数据分成若干组,然后在每一组内设置不可重复号?
这样可以解决计算量过大的问题。另外不知道楼主使用的是什么数据库,如果是sql 2000,一次对付几百万条数据是有点吃力的。