當前位置:首頁 » 編程語言 » sqlserver視圖性能
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver視圖性能

發布時間: 2022-11-29 02:20:28

sqlserver 為什麼用視圖能提高查詢效率

你說的是 普通視圖? 還是分區視圖啊?

普通視圖 不會大幅提高查詢效率啊, 能提高點開發效率倒是真的。

分區視圖, 某些情況下, 倒是可以大幅度提高查詢的效率。

索引視圖(物化視圖) ,倒是可以提升查詢效率,但是那也是靠創建視圖後的
CREATE UNIQUE CLUSTERED INDEX 來提升的。

② 在sqlserver中建立視圖有什麼好處

視圖:是從一個或幾個基本表(或視圖)導出的虛擬表。
作用:
1、視圖能夠簡化用戶的操作
2、視圖使用戶能以多鍾角度看待同一數據
3、視圖對重構資料庫提供了一定程度的邏輯獨立性
4、視圖能夠對機密數據提供安全保護
5、適當的利用視圖可以更清晰的表達查詢

③ sqlserver 建立視圖有什麼作用

視圖的作用:
1 視圖可以簡化用戶的操作
試圖機制使用戶可以將注意力集中在所關心的數據上
2 視圖使用戶能以多種角度看待同一數據
視圖使用戶能以多種角度看待同一數據,當許多不同種類的用戶共享同一資料庫時,這種靈活性很重要
3視圖對重構資料庫提供了一定程度的邏輯獨立性
4 視圖能夠對機密數據提供安全保護
有了視圖機制,就可以在設計數據可應用系統時,對不同的用戶定義不同的視圖,使機密數據不出現在不應看到這些數據的用戶視圖上
5適當的利用視圖可以更清晰的表達查詢

④ SQL Server 視圖查詢慢,如何優化請不要復制粘貼謝謝

慢的原因在:【DELETE_FLAG IN ('R', 'X', 'U', 'D')】,查詢中出現【in】的話資料庫會解析成下面這個樣子去執行。
【DELETE_FLAG='R' OR DELETE_FLAG='X' OR DELETE_FLAG='U' OR DELETE_FLAG='D'】

而資料庫一旦使用了【OR】條件做查詢的話,索引就不會用到了,因此就會造成查詢過慢。

建議:

SELECT 。。。。。
WHERE DELETE_FLAG='R'
UNION
SELECT 。。。。。
WHERE DELETE_FLAG='X'
UNION
SELECT 。。。。。
WHERE DELETE_FLAG='U'
UNION
SELECT 。。。。。
WHERE DELETE_FLAG='D'

另外補充一點,視圖本身就會造成效率低,因為視圖存的是sql定義,當執行查詢的時候 資料庫會先上磁碟上查詢視圖定義 再利用視圖定義查詢數據,這樣就產生了至少兩次磁碟i/o,oracle中有物化視圖的概念,SqlServer中應該也有,如果我的改善計劃還不能達到你的要求的話,建議考慮一下。

---
以上,希望對你有所幫助。

⑤ sqlserver資料庫中的視圖問題

是的 簡歷視圖只是簡便查詢 把一個或多個sql結果顯示在一個頁面中 其本質還是執行sql並不能增加查詢效率 查詢效率上還是要從 索引和查詢條件 上入手 盡量少用模糊匹配 非常拖效率分頁也是盡量使用sql分頁

⑥ sqlserver 物化視圖問題

可以的。貼一片網上的資料給你,具體參考地址:http://happinessmoon.javaeye.com/blog/364011
物化視圖 sql server
物化視圖,所謂視圖實際上是不存儲物理信息的(同表相區別,表存儲實際的數據和表的索引信息等。),視圖僅僅存儲 一個select語句而已。而物化視圖就要視圖也存儲實際的數據,這種實際數據,就是索引。oracle 8imssqlserver2000中引入的。比如oracle的函數索引和sqlserver2000的索引視圖都是物化視圖。原因是這種視圖能夠顯著提高性能,舉個例子
一個表:

create table mytable (id int not null,name varchar(20) not null)
create index idx_mytable on mytable.name
當我們查詢的時候,

select * from mytable where name like 'j%',

優化器能夠使用索引來提高性能,然而我們遇到這種情況就不能使用索引了,如:
select * from mytable where name like '%bing%'
或者
select * from mytable where substring(name,1,5)='jiang'
這樣的情況不能使用索引
但引入物化視圖就不同了
create view myview(vid,vname) as select id,substring(name,1,5) from myview.
然後再vname上建立索引即可顯著提高查詢性能。
oracle的函數索引亦是如此。
create index idx_mytable on mytable(upper(name))
--
就是這樣的

http://book.51cto.com/art/200710/57893.htm

1.6.2 物化視圖

SQL Server 2005增強了索引化視圖,也叫做物化視圖。現在你可以使用一個能索引化的視圖擴展集合了。在SQL Server中還有一些可以被索引化的視圖類型,如使用下列選項的視圖:

外部連接(Outer Joins)。
級聯集合(Scalar Aggregates)。
ROLLUP和CUBE。

當資料庫管理員或者開發者在視圖上創建索引時,這個視圖就被物化(執行)了,並且結果集被永久地保存在唯一聚簇索引(Clustered Index)中,保存方式與一個有聚簇索引的表的保存方式相同。可以在第一級唯一聚簇索引創建之後添加非聚簇的第二級索引。

索引視圖有以下兩個優點。

減除了為引用視圖的查詢動態建立結果集的管理開銷。
優化人員可以在查詢中使用視圖索引,而不需要在FROM子句中直接指定視圖。
引用索引化視圖中的相關列的現有查詢可以受益於提高了的在索引化視圖中獲取數據的效率,而且不需要重新編寫代碼。關於它們更多的介紹,請見第3章。代碼舉例,請見第6章「代碼章節」。

⑦ 如何提高oracle視圖的查詢速度

為什麼要把26個表 union 起來,每個表都要查一次,太費勁了

如果經常用到這個表查詢的話,可以建立一個 物化視圖 materialized view ,並根據相應的欄位(哪個 欄位查詢次數比較多),建立索引,這樣查詢效率會不會好些
另外,如果是按日期或者按地區等分的表,可以放在一個表中,以分區表的形式存在,查詢時,只查詢那個分區就可以了,你可以看一下 partition list

⑧ 怎樣查出SQLServer的性能瓶頸

SQLServer性能監控

這套性能優化的清單將至少准科學的幫助你找出你的SQLServer任何明顯的性能問題。說是這樣說,SQLServer的性能調優仍然是很困難的。我試圖用這套清單去找出「容易」的sqlserver性能問題,困難的留待稍後。我這樣做是因為很容易將容易和困難的的性能調優問題搞混。通過列出一個「容易」的性能調優范圍,就很容易的將這些問題解決,一旦解決了這些容易的問題,那麼你就能集中去解決更困難的問題。

使用這個SQLServer性能調優清單的一個好處是,它將不僅僅告訴你目前最容易解決的性能問題是什麼,而且還幫助你正確的去解決。在某種程度上,你可以選擇不同的順序進行。換句話說,你可以故意做出特殊的決定而不是按照清單通常的順序進行。某種意義上說你是對的,不是所有的性能調優建議都適合所有的情形。另外,你的決定是基於你的資源限制,例如沒有足夠的錢去買滿足負荷的硬體。如果真是那樣的話,你就別無選擇了。還有,你的決定可能基於一些政治原因,那是你不得不作出的改變。不管怎樣,你需要知道你能做什麼,使用這個性能調優清單找出你能改變的范圍並做出相應的改變提升你的SQLServer的性能。

一般來說,你將在你的每一個SQL伺服器上執行這個清單。如果遇到清單中的一些問題,這會花掉你一些時間。我建議你從目前性能問題最多的的伺服器開始,然後當你有時間的時候按照自己的思路去解決其他伺服器。

一旦你完成了,可仍然有很多事情要去做。記住,這些只是一些容易的。一旦你完成了這些容易的,接下來你需要花時間去解決更困難問題。這個是另一篇文章要解決的問題了。

怎樣進行你的SQLServer性能調優呢?

為了使其變得容易,我把它們分成了以下幾個部分:
? 使用性能監視器找出硬體瓶頸
? SQLServer硬體性能監控列表
? 操作系統性能監控列表
? SQLServer2000配置性能監控列表
? 資料庫配置設置性能監控列表
? 索引性能監控列表
? 應用程序和T-SQL性能監控列表
? SQLServer資料庫作業性能監控列表
? 使用Profiler找出低效的查詢
? 怎樣最好的實現SQLServer性能監控
管理你的SQLServe性能的最好方法是首先回顧上面每一部分的內容,把它們列印出來。然後完成每一部分的內容,寫下你收集到的結果。你也可以按照你喜歡的順序進行。上面的步驟僅僅列出了我執行的順序,因為那樣通常能達到一個比較好的效果。

性能監控列表
計數器名稱 均值 最小值 最大值
Memory: Pages/sec
Memory: Available Bytes
Physical Disk: % Disk time
Physical Disk: Avg. Disk Queue Length
Processor: % Processor Time
System: Processor Queue Length
SQL Server Buffer: Buffer Cache Hit Ratio
SQL Server General: User Connections

在上表輸入你的結果.

使用性能監視器找出SQLServer硬體瓶頸

開始SQLServer性能調優的最佳地方就是從性能監視器(系統監視器)開始。通過一個24小時的周期對一些關鍵的計數器進行監控,你將對你SQLServer伺服器的硬體瓶頸了如指掌。

一般來說,使用性能監視器去創建一個一些關鍵的計數器的24小時周期的監控日誌。當你決定創建這個日誌的時候,你需要選擇一個典型的24小時的周期,例如,選擇一個典型的比較忙的日期,而不是周日或節假日。

一旦你將這些捕獲的數據形成日誌後,在性能監視器的圖形界面下會顯示計數器的推薦值。你在上表中記下均值、最小值、峰值。做完這些後,用你的結果跟下面的分析比較。通過你的結果和下面的建議值進行比較,你將能快速的找到你的SQLServe正在經歷的潛在的硬體瓶頸。

關鍵性能計數器說明

下面是不同關鍵性能計數器的一個討論,它們的建議值和為了幫助解決硬體瓶頸問題的一些選項。注意我已經限制了性能監視器需要監視的一些關鍵計數器。我這么做是因為在本文我們的目的是為了容易的找到顯而易見的性能問題,許多其他的性能監視器計數器你能在本網站其他地方找到。

Memory: Pages/sec

這個計數器記錄的是每秒鍾內存和磁碟之間交換的頁面數。交換更多的頁面、超過你伺服器承受的更多的I/O,將輪流降低你SQLserver的性能。你的目的就是盡量將頁面減少到最小,而不是消除它。

如果你的伺服器上SQLServer是最主要的應用程序,那麼這個值的理想范圍是0~20之間。可能很多時候你看到的值都會超過20。這個值一般要保持在每秒的平均頁數在20以下。

如果這個值平均總是超過20,其中最大的一個可能是內存瓶頸問題,需要增加內存。通常來說,更多的內存意味著需要執行的頁面更少。
在大多數情況下,伺服器決定SQLServer使用的適當內存的大小,頁面將平均小於20。給SQLServer適當的內存意味著伺服器的緩存命中率(Buffer Hit Cache Ratio 這個稍後會講到)達到99%或者更高。如果在一個24小時的周期里你的sqlserver的緩存命中率達到99%或者更高,但是在這個期間你的頁面數總是超過20,這意味著你或許運行了其他的程序。如果是這樣的情況,建議你移除這些程序,使SQLServer是你的伺服器的最主要的程序。

如果你的sqlserver伺服器沒有運行其他程序,並且在一個24小時的周期里頁面數總是超過20,這說明你應該修改你對SQLServer的內存設置了。將其設置為「動態配置SQLServer的內存」,並且最大內存設置得高一些。為了達到最優,SQLServer將盡可能的獲得多的內存以完成自己的工作,而不是去和其他的程序爭奪內存。

Memory: Available Bytes

另一個檢查SQLServer是否有足夠的物理內存的方法是檢查Memory Object: Available Bytes計數器。 這個值至少大於5M,否則需要添加更多的物理內存。在一個專門的SQLServer伺服器上,SQLServer試圖維持4-10M的自由物理內存,其餘的物理內存被操作系統和SQLServer使用。當可用的物理內存接近5M或者更低時,SQLServer最可能因為缺少內存而遇到性能瓶頸。遇此情況,你需要增加物理內存以減少伺服器的負荷,或者給SQLServer配置一個合適的內存。

Physical Disk: % Disk Time

這個計數器度量磁碟陣列繁忙程度(不是邏輯分區或磁碟陣列上獨立的磁碟)。它提供一個對磁碟陣列繁忙程度相對較好的度量。原則上計數器% Disk Time的值應該小於55%。如果持續超過55%(在你24小時的監控周期里大約超過10分鍾),說明你的SQLServer有I/O瓶頸。如果你只是偶爾看到,也不必太擔心。但是,如果經常發生的話(也就是說,一個小時出現好幾次),就應該著手尋找增加伺服器I/O性能或者減少伺服器負荷的解決之道了。一般是為磁碟陣列增加磁碟,或者更好更快的磁碟,或者給控制器卡增加緩存,或者使用不同版本的RAID,或者更換更快的控制器。

在NT4.0上使用該計數器之前,確認在NT命令提示符下輸入diskperf -y,重啟伺服器,以便手動打開。在NT4.0下第一次必須將該計數器打開,Windows2000默認是打開的。

Physical Disk: Avg. Disk Queue Length

除了觀察物理磁碟的% Disk Time計數器外,還可以用Avg. Disk Queue Length計數器。磁碟陣列中的各個磁碟的該值如果超過2(在你24小時的監控周期里大約超過10分鍾),那麼你的磁碟陣列存在I/O瓶頸問題。象計數器% Disk Time一樣,如果只是偶爾看到,也不必太擔心。但是,如果經常發生的話,就應該著手尋找增加伺服器I/O性能的解決之道了。如前所述。

你需要計算這個值,因為性能監視器不知道你的磁碟陣列中有多少物理磁碟。例如,如果你有一個6個物理磁碟組成的磁碟陣列,它的Avg.
Disk Queue Length值為10,那麼實際每個磁碟的值為1.66(10/6=1.66),它們都在建議值2以內。

在NT4.0上使用該計數器之前,確認在NT命令提示符下輸入diskperf -y,重啟伺服器,以便手動打開。在NT4.0下第一次必須將該計數器打開,Windows2000默認是打開的。

一起使用這兩個計數器將幫助你找出I/O瓶頸。例如,如果% Disk Time的值超過55%,Avg. Disk Queue Length計數器值超過2,伺服器則存在I/O瓶頸。

Processor: % Processor Time

處理器對象: % Processor Time計數器對每一個CPU可用,並針對每一個CPU進行檢測。同樣對於所有的CPU也可用。這是一個觀察CPU利用率的關鍵計數器。如果% Total Processor Time計數器的值持續超過80%(在你24小時的監控周期里大約超過10分鍾),說明CPU存在瓶頸問題。如果只是偶爾發生,並且你認為對你的伺服器影響不大,那沒問題。如果經常發生,你應該減少伺服器的負載,更換更高頻率的CPU,或者增加CPU的數量或者增加CPU的2級緩存(L2 cache)。

System: Processor Queue Length

根據% Processor Time計數器,你可以監控Processor Queue Length計數器。每個CPU的該值如果持續超過2(在你24小時的監控周期里大約超過10分鍾),那麼你的CPU存在瓶頸問題。例如,如果你的伺服器有4個CPU,Processor Queue Length計數器的值總共不應超過8。

如果Processor Queue Length計數器的值有規律的超過建議的最大值,但是CPU利用率相對不是很高,那麼考慮減少SQLServer的"max worker threads"的配置值。Processor Queue Length計數器的值高的可能原因是有太多的工作線程等待處理。通過減少"maximum worker threads"的值,強迫線程池踢掉某些線程,從而使線程池得到最大的利用。

一起使用計數器Processor Queue Length和計數器% Total Process Time,你可以找到CPU瓶頸,如果都顯示超過它們的建議值,可以確信存在CPU瓶頸問題。

SQL Server Buffer: Buffer Cache Hit Ratio

SQL Server Buffer中的計數器Buffer Cache Hit Ratio用來指出SQLServer從緩存中而不是磁碟中獲得數據的頻率。在一個OLTP程序中,該比率應該超過90%,理想值是超過99%。如果你的buffer cache hit ratio低於90%,你需要立即增加內存。如果該比率在90%和99%之間,你應該認真考慮購買更多的內存了。如果接近99%,你的SQLServer性能是比較快的了。某些情況下,如果你的資料庫非常大,你不可能達到99%,即使你在伺服器上配置了最大的內存。你所能做的就是盡可能的添加內存。

在OLAP程序中,由於其本身的工作原理,該比率大大減少。不管怎樣,更多的內存總是能提高SQLServer的性能。

SQL Server General: User Connections

既然sqlserver的使用人數會影響它的性能,你就需要專注於sqlserver的General Statistics Object: User Connections計數器。它顯示sqlserver目前連接的數量,而不是用戶數。
如果該計數器超過255,那麼你需要將sqlserver的"Maximum Worker Threads" 的配置值設置得比預設值255高。如果連接的數量超過可用的線程數,那麼sqlserver將共享線程,這樣會影響性能。"Maximum Worker Threads"需要設置得比你伺服器曾經達到的最大連接數更高。