加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 存储过程与内联SQL

发布时间:2021-05-24 07:00:37 所属栏目:编程 来源:网络整理
导读:我知道存储进程通过执行路径(比应用措施中的内联sql)更有用.然而,当被按下时,我对付为什么不是超等常识. 我想知道这方面的技能推理(往后我可以向别人表明). 任何人都可以帮我拟定一个好的谜底吗? 办理要领 我信托这种情感在某一时候是正确的,但在当前版本的S

我知道存储进程通过执行路径(比应用措施中的内联sql)更有用.然而,当被按下时,我对付为什么不是超等常识.

我想知道这方面的技能推理(往后我可以向别人表明).

任何人都可以帮我拟定一个好的谜底吗?

办理要领

我信托这种情感在某一时候是正确的,但在当前版本的SQL Server中并非云云.整个题目是,在已往,姑且SQL语句无法正确优化,由于SQL Server只能在批处理赏罚级别举办优化/编译.此刻我们有语句级优化,因此来自应用措施的正确参数化查询可以操作与嵌入在存储进程中的查询沟通的执行打算.

我如故更喜好DBA端的存储进程,缘故起因如下(个中一些也许会对机能发生庞大影响):

>假如我有多个应用措施一再行使沟通的查询,则存储进程会封装该逻辑,而不是在差异的代码库中多次乱丢沟通的即席查询.一再行使沟通查询的应用措施也也许受到打算缓存膨胀的影响,除非它们是逐字复制的.纵然案例和空缺地区的差别也也许导致统一打算的多个版本被存储(挥霍).
>我可以搜查息争决查询正在执行的操纵,而无需会见应用措施源代码或运行昂贵的跟踪以查察应用措施正在执行的操纵.
>我还可以节制(并事先知道)应用措施可以运行什么查询,它可以会见哪些表以及在什么上下文中等.假如开拓职员在他们的应用措施中姑且编写查询,他们要么会有每当他们必要进入我不知道或无法猜测的桌子时,可能假如我不那么认真任/热情和/或有安详意识的话,那就来拉我的衬衫袖子,我只是要推广谁人用户dbo让他们不再烦我.凡是,当开拓职员数目高出DBA或DBA很顽固时,就会完成此操纵.最后一点是我们的欠好,我们必要更好地提供您必要的查询.
>在相干的声名中,一组存储进程是一种很是简朴的要领,可以精确地盘点也许在我的体系上运行的查询.一旦应承应用措施绕过进程并提交本身的即席查询,为了找到它们,我必需运行一个涵盖整个营业周期的跟踪,可能理会全部应用措施代码(同样,我也许无权会见)找到任何看起来像查询的对象.可以或许查察存储进程列表(以及grep单个源,sys.sql_modules,用于对特定工具的引用)使每小我私人的糊口变得越发轻易.
>我可以花更多的时刻来防备SQL注入;纵然我接管输入并行使动态SQL执行它,我也可以节制很多应承产生的工作.在结构内联SQL语句时,我无法节制开拓职员正在做什么.
>我可以优化查询(或查询),而无需会见应用措施源代码,举办变动的手段,应用措施说话的常识有用地执行,权限(更不消说贫困)从头编译和从头陈设应用措施等.假如应用措施是分发的,这尤其成题目.
>我可以逼迫存储进程中的某些配置选项,以停止单个查询受到某些Slow in the application,fast in SSMS?题目的影响.这意味着,对付挪用即席查询的两个差异应用措施,可以将SET ANSI_WARNINGS配置为ON,另一个可以配置SET ANSI_WARNINGS,而且每个应用措施都有本身的打算副本.他们得到的打算取决于行使的参数,现有的统计数据等.在每种环境下第一次挪用查询时,这也许导致差异的打算,从而导致很是差异的机能.
>我可以节制数据范例和参数的行使方法,与某些ORM差异 – 某些早期版本的EF会按照参数的长度参数化查询,以是假如我有一个参数N’Smith’和另一个N ‘约翰逊’我会获得两个差异版本的打算.他们已包办理了这个题目.他们已包办理了这个题目,但尚有什么题目如故存在?
>我可以做ORM和其他“有效的”框架和库尚不能支持的工作.

这统统都说,这个题目也许会激发更多的宗教争论,而不是技能辩说.假如我们看到这种环境产生,我们也许会将其封锁.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读