首页 存档 技术 查看内容

SQLServer中使用Check约束提升性能

2018-3-30 13:00 |来自: 互联网 314 0

摘要: (点击上方蓝字,快速关注我们) 作者:伯乐在线-宋剑 网址:http://blog.jobbole.com/95804/ 点击“阅读原文”,加入伯乐在线作者团队 在SQL Server中,SQL语句的执行是依赖查询优化器生成的执行计划,而执行计 ...

(点击上方蓝字,快速关注我们)


作者:伯乐在线-宋剑

网址:http://blog.jobbole.com/95804/

点击“阅读原文”,加入伯乐在线作者团队


在SQL Server中,SQL语句的执行是依赖查询优化器生成的执行计划,而执行计划的好坏直接关乎执行性能。

在查询优化器生成执行计划过程中,需要参考元数据来尽可能生成高效的执行计划,因此元数据越多,则执行计划更可能会高效。所谓需要参考的元数据主要包括:索引、表结构、统计信息等,但还有一些不是很被注意的元数据,其中包括本文阐述的Check约束。

查询优化器在生成执行计划之前有一个阶段叫做代数树优化,比如说下面这个简单查询:

图1.简单查询

查询优化器意识到1=2这个条件是永远不相等的,因此不需要返回任何数据,因此也就没有必要扫描表,从图1执行计划可以看出仅仅扫描常量后确定了1=2永远为false后,就可完成查询。

那么Check约束呢

Check约束可以确保一列或多列的值符合表达式的约束。在某些时候,Check约束也可以为优化器提供信息,从而优化性能,比如看图二的例子。

图2.有Check约束的列提升查询性能

图2是一个简单的例子,有时候在分区视图中应用Check约束也会提升性能,测试代码如下:

CREATE TABLE [dbo].[Test2007](

[ProductReviewID] [int] IDENTITY(1,1) NOT NULL,

[ReviewDate] [datetime] NOT NULL

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Test2007] WITH CHECK ADD CONSTRAINT [CK_Test2007] CHECK (([ReviewDate]

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类