国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL SERVER優化建議

2024-08-31 00:49:10
字體:
來源:轉載
供稿:網友

在實際的工作中,尤其是在生產環境里邊,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使用的我們建立的索引.只需要使用索引就可以查詢到結果,極大的提高了我們的查詢速度.

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上蔡县| 平顺县| 玉门市| 久治县| 礼泉县| 揭西县| 陈巴尔虎旗| 望江县| 报价| 哈巴河县| 都江堰市| 乐至县| 仪征市| 沾化县| 德钦县| 三台县| 黄石市| 永嘉县| 米脂县| 青阳县| 巴青县| 广汉市| 广宁县| 阿图什市| 盖州市| 石家庄市| 北京市| 孝义市| 苏尼特右旗| 嘉鱼县| 长垣县| 开封县| 栾川县| 额敏县| 彭山县| 灵丘县| 长春市| 金寨县| 沾化县| 泰宁县| 七台河市|