仓酷云

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

[学习教程] SQL Sqlserver查询的平安性和功能的优化

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继SQL注进的道理

甚么SQL注进

将SQL代码拔出到使用程序的输出参数中,以后,SQL代码被传送到数据库实行。从而到达对使用程序的打击目标。
注进道理




罕见打击办法

检测是不是能够注进【检测注进点】

示例:http://192.168.0.1/temp.aspx?id=aor1=1--
假如下面语句能够实行申明能够完成注进,则能够

使用体系历程、体系表注进数据库

示例【给体系增加一个用户,黑客能够完成远程登录把持服务器】:http://192.168.0.1/temp.aspx?id=1;execxp_cmdshellnetuseradmin123456/add
绕历程序的限定

示例:程序中常常限定单引号的数据,可是黑客传进单引号的ASCII码
跨站点注进

在Web页面挂某些歹意的HTML、JavaScript代码
提防SQL注进

限定毛病信息的输入,制止毛病信息的输入使得黑客晓得网站的手艺完成接纳甚么数据库,接纳甚么平台

示例:在Web.config文件中设置
<customErrorsmode="On"defaultRedirect="error.aspx">
</customErros>
限定会见数据库账号的权限

在开辟使用体系的时分就应当限定,给程序最小会见数据库的权限
利用参数命令传送参数

不要利用拼接字符串的体例机关SQL语句而接纳参数命令
利用存储历程

存储历程在数据库中
只能实行存储过程当中流动的代码
限定输出长度

避免黑客输出超年夜字符串,招致服务器瘫痪
避免黑客输出较长的歹意剧本等
完成办法:文本框的MaxLength属性
URL重写手艺

示例:http://testWeb/news.aspx?id=111
重写成:http://testWeb/10101111.html
传送参数只管不必字符串

http://testWeb/news.aspx?id=111and1=1【玄色部分给了SQL注进的时机】
SQL优化

为何要优化

开辟是对功能思索未几【手艺差、项目工期紧等缘故原由没有思索功能成绩】
体系运转中,数据量扩展,会见量增加,糟糕的SQL伤害入手下手显现
低效SQL的伤害

体系呼应变慢,软件开辟中的8秒定律,当翻开一个软件或网页凌驾8秒工夫还没有显现,则呼应太慢。
逝世锁,当分歧用户都会见某些资本的时分SQL语句不妥招致逝世锁
客户得到信念,软件失利
低效SQL低效在那里?

u功能低下的本源
l硬件缘故原由,数据库的设置分歧理,数据库的数据文件和日记文件没有分磁盘寄存,会极年夜影响IO功能
l没有创建索引,大概SQL没有走索引。在万万级数据的表上建索引是很有需要的。
lSQL过于庞大,太长的SQL语句满意程序需求可是影响功能。子查询嵌套过量对功能有影响,查询联系关系的表出格多也影响功能
l频仍会见数据等等
SQL怎样被SQLServer实行的

SQL实行道理




l注释:起首注释SQL语句【语法是不是准确】
l剖析:查验语句的呈现的工具是不是无效【举行一个剖析,要反省工具一切权的权限】
l优化:【反省SQL语句是不是可以利用索引,SQL语句怎样实行效力高,制订一个实行企图】
l编译:
l实行SQL语句:【把编译过的查询请求提交并举行处置】
怎样优化SQL

完美开辟的办理

完美代码考核、测试机制,软件开辟是艺术!
检测SQL查询的效力

语法【对IO和Time对SQL实行举行统计】:
SETSTATISTICSIOON
SETSTATISTICSTIMEON
------------SQL代码---------
SETSTATISTICSIOOFF
SETSTATISTICSTIMEOFF
注重:在检测之前要清算缓存,由于当我们实行SQL语句的时分查出的数据会在数据库中举行缓存,从头查询会前往缓存中的信息。
DBCCDROPCLEANBUFFERS
DBCCFREEPROCCACHE
履历:利用子查询嵌套不要过量,只管利用表毗连查询取代子查询,由于表毗连查询效力稍高一点。
SQL优化工具

利用报表服务

经由过程ReportingService查找低效SQL
选择
功能-批处置实行统计信息和功能相干的几个报表服务:
功能-工具实行统计信息
功能-按均匀CPU工夫排在后面的查询
功能-按均匀IO次数排在后面的查询
功能-按总CPU工夫排在后面的查询
功能-按IO总次数排在后面的查询
操纵树模:
1.数据引擎上点击右键—报表—尺度报表—体贴的方面



呈现以下图:






申明:经由过程这个报表找到排在前10sql语句,假如这些语句是用户编写的sql语句,我能够对其举行优化。
我们能够依据这些信息选择出必要优化的SQL语句举行优化
SQL优化履历

n年夜表缺索引---需要字段上创建索引
n索引碎片--保护阶段按期检测索引是不是有碎片,假如过量就要对索引从头构造和重修
n索引生效大概没有利用索引,比方:
uor语句利用了没有索引的字段
u对有索引的字段举行了某些函数操纵
制止对索引字段举行数值操纵

示例:
SELECT*FROMTRAINEEWHERETraineeNo+10<10000--TraineeNo是索引字段
实行效果:表Trainee扫描计数1,逻辑读取189次,物理读取0次,预读0次
修正后:
SELECT*FROMTRAINEEWHERETraineeNo<10000-10
实行效果:表Trainee扫描计数1,逻辑读取3次,物理读取0次,预读0次
利用Top语句限定前往的数据集

SELECTID,TITLE,UNITPRICEFROMBOOKSWHEREAUTHOR=马骏主编--数据库会扫描全部Books表的数据
修正为:
SELECTTOP1ID,TITLE,UNITPRICEFROMBOOKSWHEREAUTHOR=马骏主编--数据库只需找到一条切合前提的了局就当即前往了。
n因为前往的数据量削减,IO功能进步了
n条件:必需晓得要前往的行数
select字段必要几提取几

n按需检索字段,少利用Select*
u利用*,前往了良多不必要的字段,增添IO包袱。
u利用*,因为没有明白指定要查询那些字段数据,数据库引擎要消费必定工夫检索体系表,经由过程体系表[sysobjects、syscolumns]查询*代表那些字段
norderby后跟的字段只管是索引字段,假如这个字段不是索引字段能够思索时分能够给这个排序字段加上索引
利用存储历程优化

庞大的营业逻辑可使用存储历程来完成
长处:
削减收集流量--将多种操纵放在一个过程当中,削减会见次数
速率快--实行是,数据库无需再次编译
顺应性强--能够被多种使用程序挪用

实行企图

甚么是实行企图?

实行企图能够了解为SQL语句的实行路径,经由过程图表的体例检察SQL的实行步骤
其实不必要SQL语句真正实行,是优化器预算的盘算
来自数据库的统计信息,统计信息月正确,实行企图月准确



申明:收集履历:后者效力高于前者,可是以上两个查询语句的功能经由过程查询企图能够看出实际上是一样的,后者不比前者功能好。多是SQLServer的前期版本举行了优化。

示例二:









收集履历:收集履历:三个效力是纷歧样的,可是我们发明经由SQLServer优化后功能一样。但我们其实不能以此颠覆后人履历。
实行企图总结

次要图表




检索表的一切行,当查询没有利用到索引时,查询所接纳的情势即为表扫描



排序运算符能够读一切传进的行举行排序



扫描查询企图的列中指定的会萃索引



使用索引的查找功效从会萃索引中检索行



实行多表连接逻辑操纵,嵌套轮回连接一般利用索引在外部表中搜刮内部表的每行



从列中指定的非会萃索引中扫描一切行



使用索引的查找功效从非会萃索引中检索行

扫描和查找

会萃索引有扫描和查找
非会萃索引也有扫描和查找
它们的区分:
扫描:能够了解为对数据举行按次会见,并未利用索引举行查找
查找:能够了解为用索引举行查找
因而查找效力高于索引扫描效力
实行企图的意义

关于我们开辟高质量SQL是很有匡助的
起首能够匡助我们检察SQL语句是不是使用到索引,好比很庞大的SQL语句中有些用到索引,可是实行企图中却没有索引查找,我们就能够剖析响应的缘故原由

然后我们能够对照分歧的实行企图,好比到达一样效果,两个开辟职员编写的分歧SQL语句谁的效力更高我们就能够对照它们的实行企图来剖析。实行企图对照庞大的SQL语句质量就不是很高

我们还能够分离工夫统计【setstatisticsTIMEON..】一同利用,经由过程和工夫统计分离利用能够更好地发扬实行企图的感化


有了实行企图和实行工夫我们就很简单判别一条SQL语句实行效力高不高


mysql的prepare其实是本地PHP客户端模拟的,并没有根据你mysql的设置做字符集的调整。应该交与mysqlserver端做prepare,同时得调用mysql_set_character_set去操作,server才会按照字符集去做转义。
小妖女 该用户已被删除
沙发
发表于 2015-1-18 12:01:50 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
admin 该用户已被删除
板凳
发表于 2015-1-24 11:02:49 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
小女巫 该用户已被删除
地板
发表于 2015-2-1 09:34:42 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
飘灵儿 该用户已被删除
5#
发表于 2015-2-7 02:39:31 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
精灵巫婆 该用户已被删除
6#
发表于 2015-2-20 03:44:28 | 只看该作者
发几份SQL课件,以飨阅者
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-6 16:43:16 | 只看该作者
发几份SQL课件,以飨阅者
简单生活 该用户已被删除
8#
发表于 2015-3-13 05:00:13 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
不帅 该用户已被删除
9#
发表于 2015-3-20 13:28:48 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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