SQL SERVER的最佳化建議與方法

來源:互聯網
上載者:User

在實際的工作中,尤其是在生產環境裡邊,SQL語句的最佳化問題十分的重要,它對資料庫的效能的提升也起著顯著的作用.我們總是在抱怨機器的效能問題,總是在抱怨並發訪問所帶來的瑣問題,但是如果我們對沒一條SQL語句進行最佳化,儘管不能說可以解決全部問題,但是至少可以解決大部分問題.
1.Top排序問題.
我們經常要對錶某個欄位進行排序,然後取前N名.所以我們會寫如下的SQL語句:
select top 100 * from 表
order by Score desc
  如果表非常大的話,那麼這樣的操作是非常消耗資源的,因為SQL SERVER要對整個表進行排序,然後取前N條記錄.這樣的造作是在Temdb裡邊進行的,所以極端的時候會報Log已滿這樣的錯誤.為了避免進行全表的排序,我們要做的僅僅是在Score上建立索引,這樣因為Score索引的葉級是有序的,只要在Score所以的頁級取前100個,然後根據書籤尋找到實際的記錄,這樣對DB的效能就會有極大的提升.
2.同一天問題.
我們經常要尋找和一個日期同一天的記錄,所以我們回寫如下的SQL語句;
declare @DateTime datetime
set @DateTime=getdate()
select * from 表
where convert(char(10),F_Time,120)=convert(char(10),@DateTime,120)
  但是這樣寫的SQL語句帶來的問題就是不能使用F_Time上的索引了.為了近可能的使用F_Time上的索引,我們可以使用時間段查詢的方式來代替上邊的語句.
declare @start datetime
declare @end datetime
declare @datetime datetime
set @datetime=getdate()
set @start=convert(char(10),@datetime,120) -- 一天的其始時間
set @end=dateadd(ss,-1,dateadd(d,1,@start)) -- 一天的結束時間
select *from 表 where F_Time between @start and @end
這樣就解決了使用不上索引的問題.
3.利用索引進行分組操作.】  我們經常要對某一欄位進行分組,而對另外一些欄位進行彙總操作.如果我們對分組的欄位合理的使用索引,可以加快我們分組的速度.下邊以Northwind的Orders表為例:
-- orders表的EmployeeID上建有索引.
select EmployeeID,count(*)
from orders
group by EmployeeID
-- 查看執行計畫,此查詢利用了EmployeeID上的索引.如改成如下查詢:
select EmployeeID,sum(Freight)
from orders
group by EmployeeID
-- 查看執行計畫,此查詢則沒有使用EmployeeID上的索引.而是使用了全表掃描.那麼原因是什麼呢?是因為Freight沒有在EmployeeID的索引上,所以通過索引不能得到結果.而如果通過書籤查詢的成本太高,所以SQL SERVER選擇了使用全表掃描.而如果我們執行在EmployeeID和Freight上建立複合索引呢?
create index idx_EmployeeID on orders(EmployeeID,Freight)
-- 再次執行第二個查詢.查看執行計畫.SQL SERVER使用的我們建立的索引.只需要使用索引就可以查詢到結果,極大的提高了我們的查詢速度.
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.