`
java-mans
  • 浏览: 11446111 次
文章分类
社区版块
存档分类
最新评论

使用计算列提高查询性能

 
阅读更多

一般在写SQL的时候应该避免在条件中使用函数,因为这样就不能有效的使用索引,从而无法生成高效的执行计划。

SQL Server提供了计算列可以帮助我们解决这个问题。 我们举个普通的例子。有很多公司使用SQL Server Collcation为大小写敏感的,因为没有办法控制用户的输入(当然在程序中进行转化也是可以的,比如全部转为大写,但是当时设计的时候很多程序员都没有考虑到),所以再做查询的时候就必须要强制转化。

下面的语句就无法使用到索引:
select * from t wherelower(c1) = 'az'.

但是我们可以通过增加计算列解决这个问题:

setstatistics profile on
go
--note that this query does table scan because of the lower function applied
select * from t where lower(c1) = '00'
go
set statistics profile off
go
--let's add a computed column and create index on this computed column
alter table t add c2 as lower(c1) PERSISTED
o
create index indx_c2 on t(c2)
go
set statistics profile on
go
--note that this query does index seek
select * from t where lower(c1) = '00'
go
set statistics profile off

通过增加索引列以后我们看一下结果,没有计算列索引之前我们只能用Table Scan,增加计算列索引之后我们就可以用Seek了。

注意:如果不使用PERSISTED 关键字,计算列是未实际存储在表中的虚拟列。每当在查询中引用计算列时,都将重新计算它们的值。使用PERSISTED 关键字计算列实际存储在表中。如果在计算列的计算更改时涉及任何列,将更新计算列的值。

另外计算列的表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。

由于存储计算列需要额外的空间并且函数复杂的话需要CPU资源,所以大家在使用的时候需要先做测试。

更多计算列信息请参考MSDN:http://msdn.microsoft.com/zh-cn/library/ms191250(v=sql.105).aspx

分享到:
评论

相关推荐

    MySQL性能优化详解.docx

    MySQL语句优化是提高数据库性能的关键步骤,它包括调整参数配置、优化SQL语句和分析执行计划等...调整MySQL配置:根据服务器的硬件资源和应用需求,调整MySQL的各项参数,如缓冲池大小、最大连接数等,以提高性能。 定

    论文研究-一种改进的冰山立方体计算方法及其在机票结算数据中的应用.pdf

    通过使用逻辑位运算实现聚合计算,提高了算法的计算性能。针对部分数据聚集现象增加动态剪枝策略,在保证算法正确性的情况下进一步提高了冰山立方体计算性能。最后将DPBUC_BI算法应用于机票结算数据的冰山立方体计算...

    SQL查询安全性及性能优化

     由于返回的数据量减少,IO性能提高了  前提:必须知道要返回的行数 select字段需要多少提取多少  按需检索字段,少使用Select *  使用*,返回了很多不需要的字段,增加IO负担。  使用*,由于没有明确指定...

    Mysql查询优化详解(含示例)

    文章还探讨了优化查询语句的方法,如避免在列上进行函数或计算、使用连接代替子查询等。此外,还强调了优化表结构、服务器配置以及硬件和配置优化的重要性。具体实例和代码片段贯穿全文,为读者提供了具体的指导和...

    甲骨文列式存储oracle in memory特性最佳应用实践培训ppt

    该资源详细介绍了In-Memory列存储的概念、架构和实现方式,以及如何在Oracle数据库中使用该特性来提高数据库性能和可靠性。此外,该资源还提供了一些最佳实践,如如何选择适当的列存储对象、如何优化列存储查询等。...

    Oracle数据库Sql性能调优

    1.30 避免在索引列上使用计算 19 1.31 自动选择索引 20 1.32 避免在索引列上使用NOT 20 1.33 用>=替代> 21 1.34 用UNION替换OR (适用于索引列) 21 1.35 用IN来替换OR 22 1.36 避免在索引列上使用IS NULL和IS NOT ...

    SQL Server数据库查询速度慢原因及优化方法

     3、没有创建计算列导致查询不优化。  4、内存不足  5、网络速度慢  6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)  7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)  8、sp_...

    论文研究-海量多维数据的存储与查询研究.pdf

    设计了HDFS上的列存储文件格式HCFile,基于HCFile给出了海量多维数据存储方案,该方案能够提高聚集计算效率,并有很好的可扩展性。同时,利用多维数据的层次性语义特征,设计了维层次索引,并给出了利用维层次索引和...

    基于Trino358和Carbondata2.2.0编译的Trino Carbondata Plugin

    CarbonData是一种新型的Apache Hadoop本地文件格式,使用先进的列式存储、索引、压缩和编码技术,以提高计算效率,有助于加速超过PB数量级的数据查询,可用于更快的交互查询。同时,CarbonData也是一种将数据源与...

    SQL性能优化

     任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。  避免不必要的类型转换,要了解“隐藏”的类型转换。  增加查询的...

    列式数据库和向量化

    Arrow的列式数据结构允许使用轻量级方案,如字典编码(dictionaryencoding)、位压缩(bitpacking),或是运行长度编码(runlength),这样在压缩比例一定时,可以提高查询性能。列式数据库组织磁盘或内存中给定的...

    C#开发经验技巧宝典

    0893 使用一个单行的子查询来更新列 524 0894 使用IN引入子查询限定查询范围 524 0895 在UPDATE语句中应用子查询 525 0896 如何应用子查询 525 0897 EXISTS与子查询联合应用 525 0898 在FROM子句中的子...

    2009 年度十大 SQL Server 技巧文章

    在SQL Server中使用XML数据来创建计算列,你的列定义必须包含必要的用来检测向列中插入的是什么数据的表达式。  使用XML在SQL Server上创建计算列(上)  使用XML在SQL Server上创建计算列(下) SQL Server中...

    Access+2000中文版高级编程

    8.1.1 在窗体或报表的记录源属性中使用查询 182 8.1.2 设置用户使用查询的权限 183 8.1.3 使用命名约定和查询文档 185 8.2 运用选择查询:使用查询设计网格 187 8.2.1 表的联接 188 8.2.2 同一个表使用两...

    Access 2000中文版高级编程(part1)

    8.1.1 在窗体或报表的记录源属性中使用查询 182 8.1.2 设置用户使用查询的权限 183 8.1.3 使用命名约定和查询文档 185 8.2 运用选择查询:使用查询设计网格 187 8.2.1 表的联接 188 8.2.2 同一个表使用两次(自...

    CnosDB 是一个具有高性能、高压缩比和高可用性的开源分布式时间序列数据库

    因此相比其它时序数据库,CnosDB 有以下特点:高性能:CnosDB 解决了时间序列膨胀,理论上支持时间序列无上限,支持沿时间线的聚合查询,包括按等间隔划分窗口的查询、按某列枚举值划分窗口的查询、按相邻时序记录的...

    Risk_Calculation_using_Backward_Elimination_Algorithm_in_Life_Insurance:用于降维的后向消除算法的实现,以提高人寿保险行业的风险计算性能

    人寿保险中使用向后消除算法的风险计算此处的python代码包含用于降维的向后消除算法的实现,以提高人寿保险行业中风险计算的性能。 尽管此实验是在kaggle.com上公开提供的人寿保险数据集上进行的,但该方法对于降低...

    SQL 优化原则

    也就是说如果某列存在空值,即使对该列建索引也不会提高性能。  任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。  2. 联接列  对于有联接的列,即使最后的联接值为一个静态值,...

    列存储数据库中压缩位图索引技术

    为提高压缩码的利用率,提出一种适用于列存储数据库的压缩位图索引技术。定义反转、合并等操作,将所有计算的输入值与输出值格式化为位向量形式。通过活跃度衡量索引中位向量的复杂度,并对压缩位向量进行直接计算,优化...

    计算机信息管理系统设计.doc

    1 绪论 1.1课题背景 随着我国国民经济建设的蓬勃发展和具有中国特色的社会主义市场经济体制的迅速完 善,各个行业都在积极使用现代化的手段,不断改善服务质量,提高工作效率,这些都 在很大程度上给企业提出越来越...

Global site tag (gtag.js) - Google Analytics