《2020(效率管理)怎样提高数据库查询效率》由会员分享,可在线阅读,更多相关《2020(效率管理)怎样提高数据库查询效率(57页珍藏版)》请在金锄头文库上搜索。
1、(效率管理)怎样提高数据库查询效率http:/panyname,comid,position,ad.referenceid,worklocation, convert(varchar(10),ad.postDate,120) as postDate1,workyear,degreedescription FROM jobcn_query.dbo.COMPANYAD_query ad where referenceID in(JCNAD00329667,JCNAD132168,JCNAD00337748,JCNAD00338345, JCNAD00333138,JCNAD00303570,JCN
2、AD00303569, JCNAD00303568,JCNAD00306698,JCNAD00231935,JCNAD00231933, JCNAD00254567,JCNAD00254585,JCNAD00254608, JCNAD00254607,JCNAD00258524,JCNAD00332133,JCNAD00268618, JCNAD00279196,JCNAD00268613) order by postdate desc 35、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。 36、当用SELECT INTO时,它会锁住系统表(syso
3、bjects,sysindexes等等),阻塞其他的连接的存取。创建临时表时用显示申明语句,而不是 select INTO. drop table t_lxh begin tran select * into t_lxh from chineseresume where name = XYZ -commit 在另一个连接中SELECT * from sysobjects可以看到 SELECT INTO 会锁住系统表,Create table 也会锁系统表(不管是临时表还是系统表)。所以千万不要在事物内使用它!这样的话如果是经常要用的临时表请使用实表,或者临时表变量。 37、一般在GROUP B
4、Y 个HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优:select 的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。这样Group By 个Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快 38、一次更新多条记录比分多次更新每次一条快,就是说批处理好 39、少用临时表,尽量用结果集和Table类性的变量来代替它,Table 类型的变量比临时表好 40、在SQL2000下,计算字段是
5、可以索引的,需要满足的条件如下: a、计算字段的表达是确定的 b、不能用在TEXT,Ntext,Image数据类型 c、必须配制如下选项 ANSI_NULLS = ON, ANSI_PADDINGS = ON, . 41、尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。以前由于SQL SERVER对复杂的数学计算不支持,所以不得不将这个工作放在其他的层上而增加网络的开销。SQL20
6、00支持UDFs,现在支持复杂的数学计算,函数的返回值不要太大,这样的开销很大。用户自定义函数象光标一样执行的消耗大量的资源,如果返回大的结果采用存储过程 42、不要在一句话里再三的使用相同的函数,浪费资源,将结果放在变量里再调用更快 43、SELECT COUNT(*)的效率教低,尽量变通他的写法,而EXISTS快.同时请注意区别: select count(Field of null) from Table 和 select count(Field of NOT null) from Table 的返回值是不同的! 44、当服务器的内存够多时,配制线程数量 = 最大连接数+5,这样能发挥最
7、大的效率;否则使用 配制线程数量 3000 在此语句中若salary是Float类型的,则优化器对其进行优化为Convert(float,3000),因为3000是个整数,我们应在编程时使用3000.0而不要等运行时让DBMS进行转化。同样字符和整型数据的转换。 48、查询的关联同写的顺序 select a.personMemberID, * from chineseresume a,personmember b where personMemberID = b.referenceid and a.personMemberID = JCNPRH39681 (A = B ,B = 号码) sel
8、ect a.personMemberID, * from chineseresume a,personmember b where a.personMemberID = b.referenceid and a.personMemberID = JCNPRH39681 and b.referenceid = JCNPRH39681 (A = B ,B = 号码, A = 号码) select a.personMemberID, * from chineseresume a,personmember b where b.referenceid = JCNPRH39681 and a.personM
9、emberID = JCNPRH39681 (B = 号码, A = 号码) 49、 (1)IF 没有输入负责人代码 THEN code1=0 code2=9999 ELSE code1=code2=负责人代码 END IF 执行SQL语句为: SELECT 负责人名 FROM P2000 WHERE 负责人代码=:code1 AND负责人代码 40 and fid 40 and fid = 60 end 的不同 begin create table #temp (FID int identity(1,1),ReferenceID varchar(20) insert into #temp (ReferenceID) select top 100000 ReferenceID from chin