仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1145|回复: 6
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之SQL SERVER优化倡议

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-16 22:23:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但我们知道,若使用statement,并没有上述需要的数据。试想binlog中记录了一句updatetsetf1=3whereid=3。怎么恢复呢?server|优化<P>在实践的事情中,特别是在临盆情况里边,SQL语句的优化成绩非常的主要,它对数据库的功能的提拔也起着明显的感化.我们老是在埋怨呆板的功能成绩,老是在埋怨并发会见所带来的琐成绩,可是假如我们对没一条SQL语句举行优化,只管不克不及说能够办理全体成绩,可是最少能够办理年夜部分成绩.
1.Top排序成绩.
我们常常要对表某个字段举行排序,然后取前N名.以是我们会写以下的SQL语句:
selecttop100*from表
orderbyScoredesc
假如表十分年夜的话,那末如许的操纵长短常损耗资本的,由于SQLSERVER要对全部表举行排序,然后取前N笔记录.如许的做作是在Temdb里边举行的,以是极度的时分会报Log已满如许的毛病.为了不举行全表的排序,我们要做的仅仅是在Score上创建索引,如许由于Score索引的叶级是有序的,只需在Score以是的页级取前100个,然后依据书签查找到实践的纪录,如许对DB的功能就会有极年夜的提拔.
2.统一天成绩.
我们常常要查找和一个日期统一天的纪录,以是我们回写以下的SQL语句;
declare@DateTimedatetime
set@DateTime=getdate()
select*from表
whereconvert(char(10),F_Time,120)=convert(char(10),@DateTime,120)
可是如许写的SQL语句带来的成绩就是不克不及利用F_Time上的索引了.为了近大概的利用F_Time上的索引,我们可使用工夫段查询的体例来取代上边的语句.
declare@startdatetime
declare@enddatetime
declare@datetimedatetime
set@datetime=getdate()
set@start=convert(char(10),@datetime,120)--一天的其始工夫
set@end=dateadd(ss,-1,dateadd(d,1,@start))--一天的停止工夫
select*
from表
whereF_Timebetween@startand@end
如许就办理了利用不上索引的成绩.
3.使用索引举行分组操纵.
我们常常要对某一字段举行分组,而对别的一些字段举行聚合操纵.假如我们对分组的字段公道的利用索引,能够加速我们分组的速率.下边以Northwind的Orders表为例:
--orders表的EmployeeID上建有索引.

selectEmployeeID,count(*)
fromorders
groupbyEmployeeID
--检察实行企图,此查询使用了EmployeeID上的索引.如改成以下查询:
selectEmployeeID,sum(Freight)
fromorders
groupbyEmployeeID
--检察实行企图,此查询则没有利用EmployeeID上的索引.而是利用了全表扫描.那末缘故原由是甚么呢?是由于Freight没有在EmployeeID的索引上,以是经由过程索引不克不及失掉了局.而假如经由过程书签查询的本钱太高,以是SQLSERVER选择了利用全表扫描.而假如我们实行在EmployeeID和Freight上创建复合索引呢?
createindexidx_EmployeeIDonOrders(EmployeeID,Freight)
--再次实行第二个查询.检察实行企图.SQLSERVER利用的我们创建的索引.只必要利用索引就能够查询到了局,极年夜的进步了我们的查询速率.

因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。
精灵巫婆 该用户已被删除
6#
发表于 2015-3-26 14:17:37 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
第二个灵魂 该用户已被删除
5#
发表于 2015-3-18 18:45:45 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
变相怪杰 该用户已被删除
地板
发表于 2015-3-11 12:42:18 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
山那边是海 该用户已被删除
板凳
发表于 2015-3-3 18:34:57 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
活着的死人 该用户已被删除
沙发
发表于 2015-1-28 06:05:26 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
若天明 该用户已被删除
楼主
发表于 2015-1-19 10:03:47 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表