SQL 高效執行注意事項(二)

2022-01-14 02:23:31 字數 1743 閱讀 1022

sql server高效執行總的來說有兩種方式:

一、 擴容,提高伺服器效能,顯著提高cpu、記憶體,解決磁碟i/o瓶頸。硬體的提公升是立竿見影的,而且是風險小,在硬體更新換代非常快的年代,

當sqlserver 速度感覺慢的時候,第一選擇是更換更新的,更強的伺服器!

二、優化應用程式

這個是次優選擇。

sql 優化,可以考慮從以下幾個方面:

1.內嵌檢視與臨時表[源自msdn的文章《五種提高 sql 效能的方法》]

臨時表 - 在 tempdb 中的臨時表會導致查詢進行大量 i/o 操作和磁碟訪問,臨時表會消耗大量資源。

內嵌檢視 -使用內嵌檢視取代臨時表。內嵌檢視只是乙個可以聯接到 from 子句中的查詢。如果只需要將資料聯接到其他查詢,則可以試試使用內嵌檢視,以節省資源。

例如,如果要查詢最新五個定單的有關資訊,您首先需要知道是哪些定單。這可以使用返回定單 id 的 sql 查詢來檢索。此資料就會儲存在臨時表(這是乙個常用技術)中,然後與 products 表進行聯接,以返回這些定單售出的產品數量:

create table #temp1 (orderid int not null, orderdate datetime not null)

insert into #temp1 (orderid, orderdate)

select top 5 o.orderid, o.orderdate

from orders o order by o.orderdate desc

select p.productname, sum(od.quantity) as productquantity

from #temp1 t

inner join [order details] od on t.orderid = od.orderid

inner join products p on od.productid = p.productid

group by p.productname

order by p.productname

drop table #temp1

這些 sql 語句會建立乙個臨時表,將資料插入該表中,將其他資料與該錶進行聯接,然後除去該臨時表。這會導致此查詢進行大量 i/o 操作,

因此,可以重新編寫查詢,使用內嵌檢視取代臨時表。內嵌檢視只是乙個可以聯接到 from 子句中的查詢。所以,您不用在 tempdb 中的臨時表上耗費大量 i/o 和磁碟訪問,

而可以使用內嵌檢視得到同樣的結果:

select p.productname, sum(od.quantity) as productquantity

from

(select top 5 o.orderid, o.orderdate

from orders o

order by o.orderdate desc

) t

inner join [order details] od on t.orderid = od.orderid

inner join products p on od.productid = p.productid

group by p.productname

order by p.productname

此查詢不僅比前面的查詢效率更高,而且長度更短。臨時表會消耗大量資源。如果只需要將資料聯接到其他查詢,則可以試試使用內嵌檢視,以節省資源。

---------------------

SQL 高效執行注意事項(三)

合理配置tempdb 1.tempdb在sql server停掉,重啟時會自動的drop,re create.根據model資料庫會預設建立乙個新的 2.tempdb對io的要求比較高,最好分配到高io的磁碟上且與其他的資料檔案分到不用的磁碟上,以提高讀寫效率 3.應該根據根據cpu個數來配置tem...

SQL 高效執行注意事項(一)

設計sql後,應使用explain命令檢查sql,看是否使用到索引,是否存在filesort,重點檢查檢索的行數 rows 是否太大。一般來說.1.rows 1000,是在可接受的範圍內的。2.rows在1000 1w之間,在密集訪問時可能導致效能問題,但如果不是太頻繁的訪問 頻率低於1分鐘一次 又...

SQL 注意事項

選擇表名 配置ctrl 3 能夠select 桌 use nb go 物 storedprocedure dbo sp select 指令碼日期 05 28 2015 21 46 25 set ansi nulls on go set quoted identifier on go create p...