關於給表新增計算列所帶來的效能提公升

2022-02-04 13:07:40 字數 3171 閱讀 4283

最近發現專案中的sql的where部分有很多的計算組成的查詢條件,例如:

use

adventureworks2014

select

1from dbo.person where firstname+''

+lastname=

'diane margheim

'

因此想要針對這個部分進行下優化,所以打算採用計算列的方式,但是又沒有證明到底可不可行,所以發表下該文章發表下自己的理解也希望各位大神能點出不足的地方.

以下是針對計算列效能優化的證明:

先填充資料

use

adventureworks2014

goselect

*into dbo.person from

person.person

go

第一種情況,無計算列情況

第二種情況,新增計算列

alter

table dbo.person add fullname as (firstname +''

+ lastname)

set

statistics io on

setstatistics time on

dbcc

freeproccache

dbcc

dropcleanbuffers

goselect

1from dbo.person where firstname+''

+lastname=

'diane margheim

'go

再次查詢

從資訊和查詢計畫可得知,新增計算列以後不會帶來效能上的提公升

第三種情況,給計算列設定為持久,再次嘗試

將計算列設定可持久化以後效能會有乙個提公升(預讀15次)

第四種情況,不持久化的情況下給計算列新增索引

從訊息可得知,新增了索引以後,查詢提高乙個數量級,

第五種情況,持久化的情況下給計算列新增索引

已經對效能提高微乎其微了。

所以針對以上五種情況可得知:

計算列(持久化或者不持久化)新增索引以後可以對sql效能有所提高。

ps:持久化會增大本地的物理儲存空間

以上是我對計算列效能提高所帶來的證明,如果有不足,還請指點,謝謝:)

OpenStack之之一 快速新增計算節點

根據需求建立指令碼,可以快速新增節點 初始化node節點 root node2 systemctl disable networkmanager root node2 vim etc sysconfig selinux selinux disabled root node2 crontab e 5 ...

Mysql 給表新增字段

第一步 drop table if exists city create table city id int 11 not null auto increment,name char 35 not null default countrycode char 3 not null default di...

oracle給已有表新增主鍵

1,建立序列名 create sequence customer id seq increment by 1 每次加幾個 start with 1 從1開始計數 nomaxvalue 不設定最大值 nocycle 一直累加,不迴圈 cache 10 快取一旦定義了customer id seq序列,...