|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧编程|优化
1.在SQL中,假如选择某字段不为空的纪录有两种写法
wherecolumnExample
大概是
wherecolumnExampleisnotnull
经测试,后者比前者要快好几倍(columnExample经由索引)
2.在ASP中,利用GetRows与不利用GetRows而间接用Record来轮回挪用,二者实在有所不同,上面是测试
挪用纪录数:484
利用GetRows,然后用数组来显现,发明单花在GetRows的运算上花了约620毫秒.统共花了711毫秒
间接用RecordSet来轮回挪用,统共花了931毫秒
以是倡议人人利用GetRows,出格是要显现良多的前往纪录时,可是它会占用一部分一时内存.
在间接利用RecordSet时,年夜部分工夫是消费在游标的挪动上,也许占了90%以上
3.关于SQL中Count的设法
克日我对一年夜型数据库举行编程,发明我的一段程序的不管怎样优化数据库,怎样优化源程序,实行终了最少必要
600毫秒以上,而别一段只必要100多毫秒.上面是两段代码的前提束缚(AgentID已索引):
1.whereAgentID=0花了600多毫秒
2.whereAgentID>0只需100多毫秒
真的是很奇异,我入手下手了寻觅消费工夫的本源,一忽儿,我就找到了本来是Count函数,它花了快要500毫秒来举行
纪录总数统计,对数据库的AgentID的值举行剖析,又发明AgentID的98%的值都是0,看来切合的纪录越多,Count
举行的工夫就会越长.
厥后我想一想,不知SQL是不是会主动举行反盘算,也就是它先盘算不切合的条数,然后盘算切合的而返:
1.whereAgentID<1由于AgentID最不值是0,以是用此前提也一样
最初的工夫消费还是600多毫秒,没有任何须进.
以是只要一个办理计划,那就是手动举行,假如纪录总数已知,则只必要盘算不切合前提的纪录,然后总数减
往不符纪录便可失掉查找纪录的总数量.
上面是几个Count举行的工夫测试:
Count(*)无前提前往说共有纪录145539,费时恰好100毫秒
count(*)wherenameisnotNullandAgent=0前往说纪录有145530,费时431-441毫秒
(nameisnotnull往失落的后只必要实行工夫110)
Count(*)wherenameisnotNull前往纪录共有145539,费时100-110毫秒
以上的测试AgentID都是同意Null值的情形
asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。 |
|