五种提高SQL性能的方法现场直播

五种提高SQL性能的方法现场直播,第1张

五种提高SQL性能的方法现场直播,第2张

有时候,为了让应用程序运行得更快,所做的只是在这里或那里做一些小的调整。啊,但关键是要确定如何进行调整!你迟早会遇到这种情况:应用程序中的SQL查询无法按照你想要的方式响应。要么它不返回数据,要么它花费的时间长得惊人。

如果它降低了报表或您的企业应用程序的速度,如果用户必须等待太长时间,他们会非常不满意。就像你父母不想听你解释为什么半夜回来一样,用户也不会听你解释为什么查询用了这么长时间。"对不起,妈妈,我用了太多的左连接.")用户希望应用程序快速响应,他们的报告可以在瞬间返回分析数据。个人觉得,如果在上网的时候一个页面的加载时间超过十秒(嗯,五秒比较实用),我也会不耐烦。

要解决这些问题,找到问题的根源很重要。那么,你从哪里开始呢?根本原因通常是数据库设计和访问它的查询。在本月的专栏中,我将讨论四种可用于提高SQL Server性能的技术?应用程序的性能或提高其可伸缩性。我将详细解释左连接、交叉连接的使用以及标识值的检索。记住,根本没有神奇的解决方法。调整数据库及其查询需要时间、分析和大量测试。这些技术已被证明是有效的,但对于您的应用程序,其中一些技术可能比其他技术更适用。

本页内容
从INSERT返回IDENTITY
嵌入视图和临时表
避免左连接和NULL
灵活使用笛卡尔积
填空

从INSERT返回IDENTITY
我决定从遇到很多问题的内容入手:执行SQL INSERT后如何检索IDENTITY值?通常,问题不在于如何编写查询来检索值,而在于何时何地检索值。在SQL Server中,可以使用下面的语句来检索在活动数据库连接上运行的最新SQL语句所创建的标识值:

Select @ @ IDENTITY
这个SQL语句并不复杂,但要记住的一点是:如果这个最新的SQL语句不是INSERT,或者您对其他不是INSERT SQL的连接运行这个SQL,您将不会获得预期的值。您必须在INSERT SQL之后立即在同一连接上运行以下代码来检索标识,如下所示:

INSERT into Products(Product Name)Values(' Chalk ')

Select @ @ IDENTITY
在连接上对Northwind数据库运行这些查询将返回名为Chalk的新产品的标识值。所以,你用的是Visual Basic的ADO?在应用程序中,可以运行以下语句:

set ors = ocn . execute(" set no count on;插入到Products _
(ProductName)值(' Chalk ');select @ @ IDENTITY ")

lproduced = ors(0)
这段代码告诉SQL Server不要返回查询的行数,然后执行INSERT语句并返回刚刚为这一新行创建的标识值。SET NOCOUNT ON语句指示返回的记录集有一行一列,其中包含新的标识值。如果没有该语句,将首先返回空的记录集(因为INSERT语句不返回任何数据),然后返回第二个记录集,该记录集包含标识值。这可能有点令人困惑,尤其是因为您从未期望插入操作返回记录集。发生这种情况是因为SQL Server看到了该行数(即一行受到影响),并将其解释为表示一个记录集。因此,实际数据被推回到第二个记录集。当然,您可以在ADO中使用NextRecordset方法来获得第二个记录集,但是如果您可以总是首先返回记录集并且只返回记录集,将会更加方便和高效。

这个方法虽然有效,但是需要在SQL语句中添加一些额外的代码。获得相同结果的另一种方法是在INSERT之前使用SET NOCOUNT ON语句,并将SELECT @@IDENTITY语句放在表中的FOR INSERT触发器中,如下面的代码片段所示。这样,任何进入该表的INSERT语句都将自动返回标识值。

create trigger tr Products _ INSERT on Products for INSERT as
select @ @ IDENTITY
go
trigger仅在Products表上发生插入时启动,因此它总是在成功插入后返回一个标识。有了这种技术,您总是可以用同样的方式在应用程序中检索标识值。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 五种提高SQL性能的方法现场直播

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情