仓酷云

标题: MSSQL网站制作之办理SQL速率慢的办法 [打印本页]

作者: 愤怒的大鸟    时间: 2015-1-16 22:25
标题: MSSQL网站制作之办理SQL速率慢的办法
支持多种存储引擎。办理|速率上面是我多年履历的总结:收集编程总要和数据库打交道。和数据库打交道总要打仗到SQL。怎样使你的SQL跑得快一点,本文先容几种卓有成效的办法:办法1、只管利用庞大的SQL来取代复杂的一堆SQL.一样的事件,一个庞大的SQL完成的效力高于一堆复杂SQL完成的效力。有多个查询时,要擅长利用JOIN。oRs=objDBC.Execute(‘SELECT*FROMBooks‘)for(;!oRs.Eof;oRs.MoveNext()){oRs2=objDBC.Execute(‘SELECT*FROMAuthorsWHEREAuthorID=‘‘+oRs(‘AuthorID‘).value+‘‘‘);Response.write(oRs(‘Title‘).value+‘‘+oRs2(‘Name‘)+‘<br>‘);}要比上面的代码慢:oRs=objDBC.Execute(‘SELECTBooks.Title,Authors.NameFROMBooksJOINAuthorsONAuthors.AuthorID=Books.AuthorID‘);for(;!oRs.Eof;oRs.MoveNext()){Response.write(oRs(‘Title‘).value+‘‘+oRs(‘Name‘)+‘<br>‘);}办法2、只管制止利用可更新RecordsetoRs=objDBC.Execute(‘SELECT*FROMAuthorsWHEREAuthorID=17‘,(someflags));oRs(‘Name‘)=‘KarlKarlsson‘;oRs.Update();要比上面的代码慢:objDBC.Execute(‘UPDATEAuthorsSETName=‘KarlKarlsson‘WHEREAuthorID=17‘);办法3、更新数据库时,只管接纳批处置更新将一切的SQL构成一个年夜的批处置SQL,并一次运转;这比一个一个地更新数据要无效率很多。如许也加倍满意你举行事件处置的必要:(inJScript)strSQL=‘‘;strSQL+=‘SETXACT_ABORTON
‘;strSQL+=‘BEGINTRANSACTION
‘;strSQL+=‘INSERTINTOOrders(OrdID,CustID,OrdDat)VALUES(‘9999‘,‘1234‘,GETDATE())
‘;strSQL+=‘INSERTINTOOrderRows(OrdID,OrdRow,Item,Qty)VALUES(‘9999‘,‘01‘,‘G4385‘,5)
‘;strSQL+=‘INSERTINTOOrderRows(OrdID,OrdRow,Item,Qty)VALUES(‘9999‘,‘02‘,‘G4726‘,1)
‘;strSQL+=‘COMMITTRANSACTION
‘;strSQL+=‘SETXACT_ABORTOFF
‘;objDBC.Execute(strSQL);个中,SETXACT_ABORTOFF语句告知SQLServer,假如上面的事件处置过程当中,假如碰到毛病,就作废已完成的事件。办法4、数据库索引办法5、制止使Text字段太年夜当字符串的值巨细不流动时,用varchar比用char的效果要好些。我已经看到一个例子程序,字段被界说为TEXT(255),可是他的取值常常只要20个字符。这个数据表有50k个纪录,从而使这个数据库很年夜,年夜的数据库一定较慢。
这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多,你应该尝试找出其原因!见G.1调试一个MySQL服务器。
作者: 若相依    时间: 2015-1-19 11:49
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
作者: 第二个灵魂    时间: 2015-1-28 06:30
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
作者: 简单生活    时间: 2015-2-5 19:27
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
作者: 小魔女    时间: 2015-2-13 07:57
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
作者: 小女巫    时间: 2015-3-3 19:29
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
作者: 蒙在股里    时间: 2015-3-11 13:04
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
作者: 小妖女    时间: 2015-3-18 20:30
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
作者: 莫相离    时间: 2015-3-26 15:46
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2