亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQL SERVER的優(yōu)化建議與方法

 更新時(shí)間:2007年03月25日 00:00:00   作者:  
在實(shí)際的工作中,尤其是在生產(chǎn)環(huán)境里邊,SQL語句的優(yōu)化問題十分的重要,它對數(shù)據(jù)庫的性能的提升也起著顯著的作用.我們總是在抱怨機(jī)器的性能問題,總是在抱怨并發(fā)訪問所帶來的瑣問題,但是如果我們對沒一條SQL語句進(jìn)行優(yōu)化,盡管不能說可以解決全部問題,但是至少可以解決大部分問題.
1.Top排序問題.
我們經(jīng)常要對表某個(gè)字段進(jìn)行排序,然后取前N名.所以我們會寫如下的SQL語句:
select top 100 * from 表
order by Score desc
  如果表非常大的話,那么這樣的操作是非常消耗資源的,因?yàn)镾QL SERVER要對整個(gè)表進(jìn)行排序,然后取前N條記錄.這樣的造作是在Temdb里邊進(jìn)行的,所以極端的時(shí)候會報(bào)Log已滿這樣的錯(cuò)誤.為了避免進(jìn)行全表的排序,我們要做的僅僅是在Score上建立索引,這樣因?yàn)镾core索引的葉級是有序的,只要在Score所以的頁級取前100個(gè),然后根據(jù)書簽查找到實(shí)際的記錄,這樣對DB的性能就會有極大的提升.
2.同一天問題.
我們經(jīng)常要查找和一個(gè)日期同一天的記錄,所以我們回寫如下的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上的索引,我們可以使用時(shí)間段查詢的方式來代替上邊的語句.
declare @start datetime
declare @end datetime
declare @datetime datetime
set @datetime=getdate()
set @start=convert(char(10),@datetime,120)  --  一天的其始時(shí)間
set @end=dateadd(ss,-1,dateadd(d,1,@start))  --  一天的結(jié)束時(shí)間
select *from 表 where F_Time between @start and @end
這樣就解決了使用不上索引的問題.
 3.利用索引進(jìn)行分組操作.】  我們經(jīng)常要對某一字段進(jìn)行分組,而對另外一些字段進(jìn)行聚合操作.如果我們對分組的字段合理的使用索引,可以加快我們分組的速度.下邊以Northwind的Orders表為例:
--  orders表的EmployeeID上建有索引.
select EmployeeID,count(*)
from orders
group by EmployeeID
--  查看執(zhí)行計(jì)劃,此查詢利用了EmployeeID上的索引.如改成如下查詢:
select EmployeeID,sum(Freight)
from orders
group by EmployeeID
--  查看執(zhí)行計(jì)劃,此查詢則沒有使用EmployeeID上的索引.而是使用了全表掃描.那么原因是什么呢?是因?yàn)镕reight沒有在EmployeeID的索引上,所以通過索引不能得到結(jié)果.而如果通過書簽查詢的成本太高,所以SQL SERVER選擇了使用全表掃描.而如果我們執(zhí)行在EmployeeID和Freight上建立復(fù)合索引呢?
create index idx_EmployeeID on orders(EmployeeID,Freight)
--  再次執(zhí)行第二個(gè)查詢.查看執(zhí)行計(jì)劃.SQL SERVER使用的我們建立的索引.只需要使用索引就可以查詢到結(jié)果,極大的提高了我們的查詢速度.

相關(guān)文章

  • 關(guān)于Select Where In 的排序問題

    關(guān)于Select Where In 的排序問題

    有很多人不知道SQL里怎么按 Select Where In 的內(nèi)容進(jìn)行字段排序.假如SQL語句為:
    2008-03-03
  • SQL?Server數(shù)據(jù)庫之表的高級查詢

    SQL?Server數(shù)據(jù)庫之表的高級查詢

    這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫之表的高級查詢的相關(guān)資料,高級查詢在數(shù)據(jù)庫中用得是最頻繁的,也是應(yīng)用最廣泛的,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • sqlserver?給表添加索引的操作方法

    sqlserver?給表添加索引的操作方法

    索引利用數(shù)據(jù)結(jié)構(gòu)和搜索算法,在數(shù)據(jù)庫中加快數(shù)據(jù)的查找和訪問速度,通過創(chuàng)建映射關(guān)系、有序排列和快速定位來提供高效的數(shù)據(jù)檢索機(jī)制,通過選擇適當(dāng)?shù)乃饕蛢?yōu)化查詢,可以提高數(shù)據(jù)庫的性能和效率,本文介紹sqlserver?如何給表添加索引,一起看看吧
    2023-10-10
  • SQL數(shù)據(jù)庫日志已滿解決方法

    SQL數(shù)據(jù)庫日志已滿解決方法

    把硬盤上的其他文件刪除,以空出硬盤空間,將數(shù)據(jù)庫的日志文件大小改成無限制,然后分離數(shù)據(jù)庫,要確保分離成功等等需要了解的朋友可以參考下
    2012-12-12
  • SQL語句性能優(yōu)化(續(xù))

    SQL語句性能優(yōu)化(續(xù))

    這篇文章主要介紹了SQL語句性能優(yōu)化(續(xù)),設(shè)計(jì)到性能優(yōu)化相關(guān)知識,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • SQLserver查詢數(shù)據(jù)類型為ntext是空或NULL值的方法

    SQLserver查詢數(shù)據(jù)類型為ntext是空或NULL值的方法

    SQLserver查詢數(shù)據(jù)類型為ntext是空或NULL值的方法
    2010-07-07
  • MySql刪除和更新操作對性能有影響嗎

    MySql刪除和更新操作對性能有影響嗎

    做編程的同胞都知道,所有的項(xiàng)目都是離不開數(shù)據(jù)庫,數(shù)據(jù)庫離不開增刪改查操作,那么刪除和更新操作對性能有影響嗎?下面小編給大家詳細(xì)介紹MySql刪除和更新對性能的影響,需要的朋友可以參考下
    2015-08-08
  • SQLServer恢復(fù)表級數(shù)據(jù)詳解

    SQLServer恢復(fù)表級數(shù)據(jù)詳解

    這篇文章主要介紹了SQLServer中用于快速恢復(fù)表,而不是庫,但是切記,防范總比亡羊補(bǔ)牢好,需要的朋友可以參考下
    2014-08-08
  • Oracle、MySQL和SqlServe三種數(shù)據(jù)庫分頁查詢語句的區(qū)別介紹

    Oracle、MySQL和SqlServe三種數(shù)據(jù)庫分頁查詢語句的區(qū)別介紹

    這篇文章主要介紹了Oracle、MySQL和SqlServe三種數(shù)據(jù)庫分頁查詢語句的區(qū)別介紹 的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • MSsql每天自動備份數(shù)據(jù)庫并每天自動清除log的腳本

    MSsql每天自動備份數(shù)據(jù)庫并每天自動清除log的腳本

    有自己服務(wù)器的朋友需要用到的東西,因?yàn)閙ssql數(shù)據(jù)需要經(jīng)常備份
    2008-09-09

最新評論