皇宫简化数据库编程毫无疑问的,但它有一个缺点吗?内联SQL需要一个与数据库以某种方式打开了数据库,以注射。内联SQL还必须语法检查,有计划建造,然后执行,这需要宝贵的循环。存储程序也已有一个坚实的标准,在很大的数据库应用程序。许多编程人员,我知道利用一个数据层,简化了发展,但是,不到该程度的皇宫。是时候放弃对SP是去皇宫?

有帮助吗?

解决方案

皇宫SQL实际上提出了一些令人震惊的表现问题的数据库。基本上,它创建了多个执行计划基础上的长度参数。我发布的关于这一同时后在我的博客 皇宫SQL可能会导致性能的问题.

现在,就是说,皇宫并没有一个地方吗?几乎没有。皇宫肯定有一个地方的发展工具箱,就像存储程序。最终,你想使用的储存程序时的表现是绝对必要的,使用一个奥姆工具在任何其他情况。

尽内联SQL去,有办法执行联SQL因此该计划仅仅是建成一次,并且永远不会重新编译。大多数中应该照顾的这一方面的绩效优化,以及和使用这些方法通常是最安全的方式执行你的SQL因为它迫使你使用的参数化的询问。

最喜欢的数据库解决方案,正确的答案取决于该问题你想到解决。如果你有利于发展的速度超过数据库/应用程序的性能,则可使用皇宫或另一DAL/奥姆工具是最好的路要走。如果你有利于绩效的便于发展,然后使用存储的过程和纯净的数据集将是你最好的选择。LLBLGen甚至提供了一个皇宫来LLBLGen层,所以你可以使用皇宫查询LLBLGen的目的和有LLBLGen实际上把手建立查询和避免一些挫折的皇宫.

其他提示

你的基本前提是有缺陷的..

内联SQL需要一个与数据库以某种方式打开了数据库,以注射。

没有它没有。硬盘编码用户输入的价值观成SQL statement不,但你可以这样做,与存储程序。

参数化您的查询,防止注射攻击,但联SQL可参数化只是作为容易,因为储存的程序。

内联SQL还必须语法检查,有计划建造,然后执行。

所有Sql(SPs和内联)必须是法检查,并有计划建立在他们的第一个电话。此后,的确切文字的请求和执行计划是缓存。如果另一个请求完全相同的文本(不计算参数)接收、缓存的执行计划使用。

所以,如果你硬代码价值观纳入联SQL,该文本不会相匹配,以及它将必须重新解析的查询。然而,如果使用的参数,查询文本将符合,并且您将得到一个高速缓冲击。在这种情况下,它不会问题,如果查询在内联SQL或SP。

换句话说,唯一的问题与联SQL是,它很容易做到的东西缓慢和不安全。但是,使联SQL快速和安全是没有更多的工作,使用一个SP。

这给我们带来了皇宫,这总是使用的参数,甚至如果你硬代码的价值进入皇宫的声明,使"快速和安全"的内联SQL微不足道的。

皇宫,也有优势SPs的所有代码在一个地方,而不是分散在两个不同的机器。

如果你有兴趣制定基准,波多黎各Mariani有一个 优良的5部分组成的研究 这涵盖了在质量和数量上的差异。

他可以MS的家伙,但他的被称为一个绩效母-他基准是透彻和深思熟虑。

这是一个绩效运行,通过马克西米利安贝勒。据他说,皇宫是很慢得多。读他的全面的研究

只是想改变一个列名字-现在改变(n)SPs和(x)景。

做的一切,是昂贵的数据库(如检索、分拣等)和你就不会注意到一个问题。

此外,如果你想要显示大的电网,而不寻呼...然后用一个数据集是一个速度更快。

计算器也使用linq2sql-你看到一个问题:)?

使用一个奥姆-这是去上大多数应用程序。

PS:此外,关于微型基准的-像是..让我们选择10.000行与奥姆-不要这样做。这就是为什么你不用一个奥姆.如果你要选择10.000行使用ADO.

这取决于你在做什么。皇宫会的效率较低的实际数据组的操纵不是一个真正的数据库。但是你会省很多不具有与数据库连接在一个网络。

如果你的数据库是在同一台机器上或形式上是'良好的连接',你可能更好地使用它。

但如果你要回大量结果从一个远程db这可能意味着重要的传送时间,或者如果它是一个非常短的查询不会证明的开销,皇宫会有可能更好。

因为结构的皇宫到SQL,没有任何可能的方法可以 速度更快 比使用原始SQL,无论是你自己的以及形成查询或作为一个存储的过程。什么皇宫买你是不是速度,但类型的安全和组织;在最短的好处中一般授予你。

皇宫SQL是不是速度,这是关于建立一个更易于维护的软件系统。这是关于所有东西的专用软件工程师和建筑师的关心,这样的东西松散耦合和分层

这并不是说,你不能建立一些很不可维护的代码皇宫--没有人让你搬起石头砸自己的脚但是你-但是做得好,皇宫可以极大地帮助。我不是说皇宫是一种"银弹",但是。它有一个主的问题,使它难以用在很多企业的情况--这就是为什么MS提供的实体的框架(ADO.NET 3.0).当然,即使是不完美鉴于最近的EF表决的没有信心。

是皇宫SQL或甚至EF比原SQL?我会说一个巨大的地狱啊。还有没有其他的解决方案的可能工作得更好?也许。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top