关于给表添加计算列所带来的性能提升
2017-05-28 21:20
225 查看
最近发现项目中的SQL的WHERE部分有很多的计算组成的查询条件,例如:
因此想要针对这个部分进行下优化,所以打算采用计算列的方式,但是又没有证明到底可不可行,所以发表下该文章发表下自己的理解也希望各位大神能点出不足的地方.
以下是针对计算列性能优化的证明:
先填充数据
第一种情况,无计算列情况
第二种情况,添加计算列
再次查询
从信息和查询计划可得知,添加计算列以后不会带来性能上的提升
第三种情况,给计算列设置为持久,再次尝试
将计算列设置可持久化以后效能会有一个提升(预读15次)
第四种情况,不持久化的情况下给计算列添加索引
从讯息可得知,添加了索引以后,查询提高一个数量级,
第五种情况,持久化的情况下给计算列添加索引
已经对性能提高微乎其微了。
所以针对以上五种情况可得知:
计算列(持久化或者不持久化)添加索引以后可以对SQL性能有所提高。
PS:持久化会增大本地的物理存储空间
以上是我对计算列性能提高所带来的证明,如果有不足,还请指点,谢谢:)
USE AdventureWorks2014 SELECT 1 FROM dbo.Person WHERE FirstName+' '+LastName='Diane Margheim'
因此想要针对这个部分进行下优化,所以打算采用计算列的方式,但是又没有证明到底可不可行,所以发表下该文章发表下自己的理解也希望各位大神能点出不足的地方.
以下是针对计算列性能优化的证明:
先填充数据
USE AdventureWorks2014 GO SELECT * INTO dbo.person FROM Person.Person GO
第一种情况,无计算列情况
SET STATISTICS IO ON SET STATISTICS TIME ON DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO SELECT 1 FROM dbo.Person WHERE FirstName+' '+LastName='Diane Margheim' GO
第二种情况,添加计算列
ALTER TABLE dbo.Person ADD fullName AS (FirstName +' '+ LastName)
SET STATISTICS IO ON SET STATISTICS TIME ON DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO SELECT 1 FROM dbo.Person WHERE FirstName+' '+LastName='Diane Margheim' GO
再次查询
SET STATISTICS IO ON SET STATISTICS TIME ON DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO SELECT 1 FROM dbo.Person WHERE FirstName+' '+LastName='Diane Margheim' GO
从信息和查询计划可得知,添加计算列以后不会带来性能上的提升
第三种情况,给计算列设置为持久,再次尝试
ALTER TABLE dbo.Person ADD fullName AS (FirstName +' '+ LastName) PERSISTED
SET STATISTICS IO ON SET STATISTICS TIME ON DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO SELECT 1 FROM dbo.Person WHERE FirstName+' '+LastName='Diane Margheim' GO
将计算列设置可持久化以后效能会有一个提升(预读15次)
第四种情况,不持久化的情况下给计算列添加索引
CREATE INDEX ix_index_fullName ON dbo.Person(fullName)
SET STATISTICS IO ON SET STATISTICS TIME ON DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO SELECT 1 FROM dbo.Person WHERE FirstName+' '+LastName='Diane Margheim' GO
从讯息可得知,添加了索引以后,查询提高一个数量级,
第五种情况,持久化的情况下给计算列添加索引
已经对性能提高微乎其微了。
所以针对以上五种情况可得知:
计算列(持久化或者不持久化)添加索引以后可以对SQL性能有所提高。
PS:持久化会增大本地的物理存储空间
以上是我对计算列性能提高所带来的证明,如果有不足,还请指点,谢谢:)
相关文章推荐
- 使用Spring+Ibatis的项目,关于如何使用事务、如何提升性能的几点总结
- 关于如何添加windows的性能计数器
- 用StringBuilder(StringBuffer)#append替代字符串”+”会带来性能提升吗
- 用润乾集算报表提升性能之关联计算
- 用润乾集算报表提升性能之关联计算
- 使用Spring+Ibatis的项目,关于如何使用事务、如何提升性能的几点总结
- 报表系统性能提升之预先计算
- 关于 Java Web 项目性能提升的一些思路
- 关于 Java Web 项目性能提升的一些思路
- 用润乾集算报表提升性能之关联计算
- openSUSE 11.4发布,带来系统性能提升
- 关于性能提升
- Oracle 9i 性能大提升 SGA PGA 参数修改 &关于OS 64 32 Oracle 32 64 位概念 ...
- 关于 Java Web 项目性能提升的一些思路
- Python性能提升一 —— 高计算模块使用C++编写
- 关于性能测试中一些计算方法(throughput, active user...)
- jQuery 1.6 重要变更 - 性能提升带来破坏性变更
- 用StringBuilder(StringBuffer)#append替代字符串”+”会带来性能提升吗
- Mysql 自定义HASH索引带来的巨大性能提升----[真相篇]
- SQLite:关于日期的字段的优化将给Julia带来大幅效率提升