主頁(yè) > 知識(shí)庫(kù) > SQL SERVER的優(yōu)化建議與方法

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

熱門(mén)標(biāo)簽:沈陽(yáng)外呼系統(tǒng)有效果嗎 溫州語(yǔ)音外呼系統(tǒng)排名 百度地圖標(biāo)注信息怎么修改 福州外呼系統(tǒng)招商 AI智能云呼電話機(jī)器人怎么注冊(cè) 四川穩(wěn)定外呼系統(tǒng)公司 電話機(jī)器人接口是什么樣的 怎么在高德地圖標(biāo)注多個(gè)點(diǎn) 商家地圖標(biāo)注圖片
在實(shí)際的工作中,尤其是在生產(chǎn)環(huán)境里邊,SQL語(yǔ)句的優(yōu)化問(wèn)題十分的重要,它對(duì)數(shù)據(jù)庫(kù)的性能的提升也起著顯著的作用.我們總是在抱怨機(jī)器的性能問(wèn)題,總是在抱怨并發(fā)訪問(wèn)所帶來(lái)的瑣問(wèn)題,但是如果我們對(duì)沒(méi)一條SQL語(yǔ)句進(jìn)行優(yōu)化,盡管不能說(shuō)可以解決全部問(wèn)題,但是至少可以解決大部分問(wèn)題.
1.Top排序問(wèn)題.
我們經(jīng)常要對(duì)表某個(gè)字段進(jìn)行排序,然后取前N名.所以我們會(huì)寫(xiě)如下的SQL語(yǔ)句:
select top 100 * from 表
order by Score desc
  如果表非常大的話,那么這樣的操作是非常消耗資源的,因?yàn)镾QL SERVER要對(duì)整個(gè)表進(jìn)行排序,然后取前N條記錄.這樣的造作是在Temdb里邊進(jìn)行的,所以極端的時(shí)候會(huì)報(bào)Log已滿(mǎn)這樣的錯(cuò)誤.為了避免進(jìn)行全表的排序,我們要做的僅僅是在Score上建立索引,這樣因?yàn)镾core索引的葉級(jí)是有序的,只要在Score所以的頁(yè)級(jí)取前100個(gè),然后根據(jù)書(shū)簽查找到實(shí)際的記錄,這樣對(duì)DB的性能就會(huì)有極大的提升.
2.同一天問(wèn)題.
我們經(jīng)常要查找和一個(gè)日期同一天的記錄,所以我們回寫(xiě)如下的SQL語(yǔ)句;
declare @DateTime datetime
set @DateTime=getdate()
select * from 表
where convert(char(10),F_Time,120)=convert(char(10),@DateTime,120)
  但是這樣寫(xiě)的SQL語(yǔ)句帶來(lái)的問(wèn)題就是不能使用F_Time上的索引了.為了近可能的使用F_Time上的索引,我們可以使用時(shí)間段查詢(xún)的方式來(lái)代替上邊的語(yǔ)句.
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
這樣就解決了使用不上索引的問(wèn)題.
 3.利用索引進(jìn)行分組操作.】  我們經(jīng)常要對(duì)某一字段進(jìn)行分組,而對(duì)另外一些字段進(jìn)行聚合操作.如果我們對(duì)分組的字段合理的使用索引,可以加快我們分組的速度.下邊以Northwind的Orders表為例:
--  orders表的EmployeeID上建有索引.
select EmployeeID,count(*)
from orders
group by EmployeeID
--  查看執(zhí)行計(jì)劃,此查詢(xún)利用了EmployeeID上的索引.如改成如下查詢(xún):
select EmployeeID,sum(Freight)
from orders
group by EmployeeID
--  查看執(zhí)行計(jì)劃,此查詢(xún)則沒(méi)有使用EmployeeID上的索引.而是使用了全表掃描.那么原因是什么呢?是因?yàn)镕reight沒(méi)有在EmployeeID的索引上,所以通過(guò)索引不能得到結(jié)果.而如果通過(guò)書(shū)簽查詢(xún)的成本太高,所以SQL SERVER選擇了使用全表掃描.而如果我們執(zhí)行在EmployeeID和Freight上建立復(fù)合索引呢?
create index idx_EmployeeID on orders(EmployeeID,Freight)
--  再次執(zhí)行第二個(gè)查詢(xún).查看執(zhí)行計(jì)劃.SQL SERVER使用的我們建立的索引.只需要使用索引就可以查詢(xún)到結(jié)果,極大的提高了我們的查詢(xún)速度.
您可能感興趣的文章:
  • SQL語(yǔ)句優(yōu)化方法30例(推薦)
  • SQLServer 優(yōu)化SQL語(yǔ)句 in 和not in的替代方案
  • MSSQL Server 查詢(xún)優(yōu)化方法 整理
  • SQL Server 服務(wù)器優(yōu)化技巧淺談
  • SQL SERVER 的SQL語(yǔ)句優(yōu)化方式小結(jié)
  • SQL Server 數(shù)據(jù)庫(kù)優(yōu)化
  • SQL SERVER性能優(yōu)化綜述(很好的總結(jié),不要錯(cuò)過(guò)哦)
  • sql語(yǔ)句優(yōu)化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的語(yǔ)句
  • 海量數(shù)據(jù)庫(kù)的查詢(xún)優(yōu)化及分頁(yè)算法方案
  • SQL Server數(shù)據(jù)庫(kù)的高性能優(yōu)化經(jīng)驗(yàn)總結(jié)

標(biāo)簽:西寧 無(wú)錫 營(yíng)口 寶雞 來(lái)賓 汕尾 邯鄲 七臺(tái)河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL SERVER的優(yōu)化建議與方法》,本文關(guān)鍵詞  SQL,SERVER,的,優(yōu)化,建議,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL SERVER的優(yōu)化建議與方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于SQL SERVER的優(yōu)化建議與方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章