用概率论的方法实现理想化程序

碰到的问题如下

http://community.csdn.net/Expert/topic/4503/4503918.xml?temp=.6404383

我有一个网页需要从TextArea上传一千条记录信息,然后插入后台数据库中,ASP中的实现是通过循环调用一千次插入的存储过程,但是这样的执行效率非常低,前台网页需要等好几分钟才能得到上传成功的消息,请问有没有什么好的办法,能够在几秒钟之内完成这一千条记录的插入问题

我照你的方法试了一下,有两个问题不知如何解决:1,我需要的是1000条Insert SQL语句,每条语句可能有1000个字符长,总共最长可能是100万个字符,SQL Server最大只支持8000个字符;2,Insert的内容可能数据库中已经有了这条记录,这时候就要用Update语句,而且最后要统计总共插入了多少条有效记录。这两个问题该如何解决呢?

制造一个存储过程

@str是一个输入值
exec sp_executesql @str


asp里是这么写
sql="insert into  tryfangq([user],[count]) values('x',1)"
sql=sql & " insert into  tryfangq([user],[count]) values('t',2)"

asp怎么调用存储过程我就不写了,这样的是一次调用全部执行

制造一个存储过程

@str是一个输入值
exec sp_executesql @str


asp里是这么写
sql="insert into  tryfangq([user],[count]) values('x',1)"
sql=sql & " insert into  tryfangq([user],[count]) values('t',2)"

asp怎么调用存储过程我就不写了,这样的是一次调用全部执行

join   是一个script函数

参考帖子http://community.csdn.net/Expert/topic/4497/4497092.xml?temp=.9665644

一般情况下无所的,如果碰上大字符串连接的时候就需要,不用看meizz写的,看底下的vbs版本的

还有可以找个手册看看

那给你简单讲一下数学期望,并把你的问题建立一个数学模型

你要去检查textarea的值是不是在数据库了,现在你的方法是这样的:每一次都检查一下,然后呢,再去添加

我想到的呢是:按k个一组,混合在一起去检查一次,如果这个k个混合的都不是和数据库里相同就一次性的insert,否则就分别进行化验,这样总共要化验k+1次,假定,textarea的值与数据库中的相同的概率是p,且textarea的值都是互不影响的话,我们可以用如下方法解:

q=1-p,则k个值的混合不在数据库中的概率为q的k次方,有可能在的概率为1-q的k次方,而textarea的值需要检查的次数的X是一个随机变量,其分布率为:
X   1/k        1+(1/k)
pk  q的k次方   1-q的k次方
于是每个textarea的值平均需化验的次数为
E(X)=(1/k)*q的k次方+(1+1/k)(1-q的k次方)=1-q的k次方+1/k
N个数平均需化验的次数为
N*(1-q的k次方+1/k)
由此可知,只要选择k使
1-q的k次方+1/k<1

q的k次方-1/k>0
当p固定时,我们选取k使得
L=1-q的k次方+1/k
取得最小值,这时就是最好的分组方法,当然我们这里有个概念就是不能大于8000个字符的上限

例如p=0.1当k=4时,若N=1000,那么N个值平均只需化验
594次

你可能感兴趣的:(方法)