关于数据库优化问题收集汇总
---- 5.总结:----
select * from record whereconvert(char(10),date,112)='19991201'(10秒)
select date,sum(amount) from record group by date(11秒)
i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。
iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。
i. 尽量避免使用distinct、order by、group by、having、join、***pute,因为这些语句会加重tempdb的负担。
1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 下面将从这三个方面分别进行总结: select count(*) from record where date >'19991201' and date < '19991214'and amount >2000 (25秒) select sum(a.amount) from account a,card b where a.card_no = b.card_no(20秒) select count(*) from stuff where id_no='0'select count(*) from stuff where id_no='1' ---- 总结: select * from record wheresubstring(card_no,1,4)='5378'(13秒) select * from record where amount< 1000*30(< 1秒) create proc count_stuff asdeclare @a intdeclare @b intdeclare @c intdeclare @d char(10)beginselect @a=count(*) from stuff where id_no='0'select @b=count(*) from stuff where id_no='1'endselect @c=@a+@bselect @d=convert(char(10),@c)print @d select count(*) from record where date >'19990901' and place in ('BJ','SH')(< 1秒) select count(*) from record where date >'19991201' and date < '19991214' and amount >2000 (26秒) select date,sum(amount) from record group by date(28秒) select * from record whereamount/30< 1000(11秒) select date,sum(amount) from record group by date(27秒) select count(*) from record where date >'19990901' and place in ('BJ','SH')(14秒) select count(*) from record where date >'19990901' and place in ('BJ','SH') (27秒) 总结: select sum(a.amount) from account a,card b where a.card_no = b.card_no and a.account_no=b.account_no(< 1秒) select count(*) from record where date >'19991201' and date < '19991214' and amount >2000 (14秒) select count(*) from stuff where id_no in('0','1')(23秒) 分析: select count(*) from record where date >'19990901' and place in ('BJ, 'SH')(< 1秒) select * from record where date= '1999/12/01'(< 1秒) select * from record where card_no like'5378%'(< 1秒) select count(*) from record where date >'19991201' and date < '19991214' and amount >2000(< 1秒)
vii. 尽量使用“>=”,不要使用“>”。
iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。
b) 索引的使用规范:
iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。
xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。
iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。
3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:
ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。
v. 要注意索引的维护,周期性重建索引,重新编译存储过程。
i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。
iii. 避免对大表查询时进行table scan,必要时考虑新建索引。
viii. 注意一些or子句和union子句之间的替换
iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。
vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。
v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。
vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。
ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。
d) 合理的算法使用:
select date ,sum(amount) from record group by date(55秒)
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/sql/mssql/1781.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
SQL基本教程之行转列Pivo
时间:2021-01-20
-
region from hr.Employees union
时间:2021-01-20
-
有时候需要调整用户权限
时间:2021-01-19
-
(但使用 ORDER BY 子句并不
时间:2021-01-19
-
RAND()*10000)insert into Detail
时间:2021-01-19
-
OR 运算符:在两侧的查询
时间:2021-01-19
-
放假之前老大跟我提起了
时间:2021-01-19
-
数据库的运维计策剧本篇
时间:2021-01-19
热门文章
-
4.与聚合函数和 GROUP BY 子句有关的常见错
时间:2021-01-19
-
SQL Server安全(11/11):审核(Auditing)
时间:2021-01-09
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
