亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 如何讓你的sql運行得更快.txt

?? oracle問題集
?? TXT
字號:
如何讓你的SQL運行得更快

---- 人們在使用SQL時往往會陷入一個誤區(qū),即太關(guān)注于所得的結(jié)果是否正確,而忽略
了不同的實現(xiàn)方法之間可能存在的性能差異,這種性能差異在大型的或是復(fù)雜的數(shù)據(jù)庫
環(huán)境中(如聯(lián)機事務(wù)處理OLTP或決策支持系統(tǒng)DSS)中表現(xiàn)得尤為明顯。筆者在工作實踐
中發(fā)現(xiàn),不良的SQL往往來自于不恰當?shù)乃饕O(shè)計、不充份的連接條件和不可優(yōu)化的whe
re子句。在對它們進行適當?shù)膬?yōu)化后,其運行速度有了明顯地提高!下面我將從這三個
方面分別進行總結(jié):
---- 為了更直觀地說明問題,所有實例中的SQL運行時間均經(jīng)過測試,不超過1秒的均
表示為(< 1秒)。
---- 測試環(huán)境--
---- 主機:HP LH II
---- 主頻:330MHZ
---- 內(nèi)存:128兆
---- 操作系統(tǒng):Operserver5.0.4
----數(shù)據(jù)庫:Sybase11.0.3
一、不合理的索引設(shè)計
----例:表record有620000行,試看在不同的索引下,下面幾個 SQL的運行情況:
---- 1.在date上建有一非個群集索引
select count(*) from record where date >
'19991201' and date < '19991214'and amount >
2000 (25秒)
select date,sum(amount) from record group by date
(55秒)
select count(*) from record where date >
'19990901' and place in ('BJ','SH') (27秒)
---- 分析:
----date上有大量的重復(fù)值,在非群集索引下,數(shù)據(jù)在物理上隨機存放在數(shù)據(jù)頁上,在
范圍查找時,必須執(zhí)行一次表掃描才能找到這一范圍內(nèi)的全部行。
---- 2.在date上的一個群集索引
select count(*) from record where date >
'19991201' and date < '19991214' and amount >
2000 (14秒)
select date,sum(amount) from record group by date
(28秒)
select count(*) from record where date >
'19990901' and place in ('BJ','SH')(14秒)
---- 分析:
---- 在群集索引下,數(shù)據(jù)在物理上按順序在數(shù)據(jù)頁上,重復(fù)值也排列在一起,因而在范
圍查找時,可以先找到這個范圍的起末點,且只在這個范圍內(nèi)掃描數(shù)據(jù)頁,避免了大范
圍掃描,提高了查詢速度。
---- 3.在place,date,amount上的組合索引
select count(*) from record where date >
'19991201' and date < '19991214' and amount >
2000 (26秒)
select date,sum(amount) from record group by date
(27秒)
select count(*) from record where date >
'19990901' and place in ('BJ, 'SH')(< 1秒)
---- 分析:
---- 這是一個不很合理的組合索引,因為它的前導(dǎo)列是place,第一和第二條SQL沒有引
用place,因此也沒有利用上索引;第三個SQL使用了place,且引用的所有列都包含在組
合索引中,形成了索引覆蓋,所以它的速度是非常快的。
---- 4.在date,place,amount上的組合索引
select count(*) from record where date >
'19991201' and date < '19991214' and amount >
2000(< 1秒)
select date,sum(amount) from record group by date
(11秒)
select count(*) from record where date >
'19990901' and place in ('BJ','SH')(< 1秒)
---- 分析:
---- 這是一個合理的組合索引。它將date作為前導(dǎo)列,使每個SQL都可以利用索引,并
且在第一和第三個SQL中形成了索引覆蓋,因而性能達到了最優(yōu)。
---- 5.總結(jié):
---- 缺省情況下建立的索引是非群集索引,但有時它并不是最佳的;合理的索引設(shè)計要
建立在對各種查詢的分析和預(yù)測上。一般來說:
---- ①.有大量重復(fù)值、且經(jīng)常有范圍查詢
(between, >,< ,>=,< =)和order by
、group by發(fā)生的列,可考慮建立群集索引;
---- ②.經(jīng)常同時存取多列,且每列都含有重復(fù)值可考慮建立組合索引;
---- ③.組合索引要盡量使關(guān)鍵查詢形成索引覆蓋,其前導(dǎo)列一定是使用最頻繁的列。

二、不充份的連接條件:
---- 例:表card有7896行,在card_no上有一個非聚集索引,表account有191122行,在
account_no上有一個非聚集索引,試看在不同的表連接條件下,兩個SQL的執(zhí)行情況:

select sum(a.amount) from account a,
card b where a.card_no = b.card_no(20秒)
---- 將SQL改為:
select sum(a.amount) from account a,
card b where a.card_no = b.card_no and a.
account_no=b.account_no(< 1秒)
---- 分析:
---- 在第一個連接條件下,最佳查詢方案是將account作外層表,card作內(nèi)層表,利用
card上的索引,其I/O次數(shù)可由以下公式估算為:
---- 外層表account上的22541頁+(外層表account的191122行*內(nèi)層表card上對應(yīng)外層
表第一行所要查找的3頁)=595907次I/O
---- 在第二個連接條件下,最佳查詢方案是將card作外層表,account作內(nèi)層表,利用
account上的索引,其I/O次數(shù)可由以下公式估算為:
---- 外層表card上的1944頁+(外層表card的7896行*內(nèi)層表account上對應(yīng)外層表每一
行所要查找的4頁)= 33528次I/O
---- 可見,只有充份的連接條件,真正的最佳方案才會被執(zhí)行。
---- 總結(jié):
---- 1.多表操作在被實際執(zhí)行前,查詢優(yōu)化器會根據(jù)連接條件,列出幾組可能的連接方
案并從中找出系統(tǒng)開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、行數(shù)多的
表;內(nèi)外表的選擇可由公式:外層表中的匹配行數(shù)*內(nèi)層表中每一次查找的次數(shù)確定,乘
積最小為最佳方案。
---- 2.查看執(zhí)行方案的方法-- 用set showplanon,打開showplan選項,就可以看到連
接順序、使用何種索引的信息;想看更詳細的信息,需用sa角色執(zhí)行dbcc(3604,310,30
2)。
三、不可優(yōu)化的where子句
---- 1.例:下列SQL條件語句中的列都建有恰當?shù)乃饕珗?zhí)行速度卻非常慢:
select * from record where
substring(card_no,1,4)='5378'(13秒)
select * from record where
amount/30< 1000(11秒)
select * from record where
convert(char(10),date,112)='19991201'(10秒)
---- 分析:
---- where子句中對列的任何操作結(jié)果都是在SQL運行時逐列計算得到的,因此它不得不
進行表搜索,而沒有使用該列上面的索引;如果這些結(jié)果在查詢編譯時就能得到,那么
就可以被SQL優(yōu)化器優(yōu)化,使用索引,避免表搜索,因此將SQL重寫成下面這樣:
select * from record where card_no like
'5378%'(< 1秒)
select * from record where amount
< 1000*30(< 1秒)
select * from record where date= '1999/12/01'
(< 1秒)
---- 你會發(fā)現(xiàn)SQL明顯快起來!
---- 2.例:表stuff有200000行,id_no上有非群集索引,請看下面這個SQL:
select count(*) from stuff where id_no in('0','1')
(23秒)
---- 分析:
---- where條件中的'in'在邏輯上相當于'or',所以語法分析器會將in ('0','1')轉(zhuǎn)化
為id_no ='0' or id_no='1'來執(zhí)行。我們期望它會根據(jù)每個or子句分別查找,再將結(jié)果
相加,這樣可以利用id_no上的索引;但實際上(根據(jù)showplan),它卻采用了"OR策略"
,即先取出滿足每個or子句的行,存入臨時數(shù)據(jù)庫的工作表中,再建立唯一索引以去掉
重復(fù)行,最后從這個臨時表中計算結(jié)果。因此,實際過程沒有利用id_no上索引,并且完
成時間還要受tempdb數(shù)據(jù)庫性能的影響。
---- 實踐證明,表的行數(shù)越多,工作表的性能就越差,當stuff有620000行時,執(zhí)行時
間竟達到220秒!還不如將or子句分開:
select count(*) from stuff where id_no='0'
select count(*) from stuff where id_no='1'
---- 得到兩個結(jié)果,再作一次加法合算。因為每句都使用了索引,執(zhí)行時間只有3秒,
在620000行下,時間也只有4秒。或者,用更好的方法,寫一個簡單的存儲過程:
create proc count_stuff as
declare @a int
declare @b int
declare @c int
declare @d char(10)
begin
select @a=count(*) from stuff where id_no='0'
select @b=count(*) from stuff where id_no='1'
end
select @c=@a+@b
select @d=convert(char(10),@c)
print @d
---- 直接算出結(jié)果,執(zhí)行時間同上面一樣快!
---- 總結(jié):
---- 可見,所謂優(yōu)化即where子句利用了索引,不可優(yōu)化即發(fā)生了表掃描或額外開銷。

---- 1.任何對列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫函數(shù)、計算表達式等等,查詢時
要盡可能將操作移至等號右邊。
---- 2.in、or子句常會使用工作表,使索引失效;如果不產(chǎn)生大量重復(fù)值,可以考慮把
子句拆開;拆開的子句中應(yīng)該包含索引。
---- 3.要善于使用存儲過程,它使SQL變得更加靈活和高效。
---- 從以上這些例子可以看出,SQL優(yōu)化的實質(zhì)就是在結(jié)果正確的前提下,用優(yōu)化器可
以識別的語句,充份利用索引,減少表掃描的I/O次數(shù),盡量避免表搜索的發(fā)生。其實S
QL的性能優(yōu)化是一個復(fù)雜的過程,上述這些只是在應(yīng)用層次的一種體現(xiàn),深入研究還會
涉及數(shù)據(jù)庫層的資源配置、網(wǎng)絡(luò)層的流量控制以及操作系統(tǒng)層的總體設(shè)計。



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国毛片一区二区三区| 欧美一区二区在线免费播放| 欧美福利一区二区| 国产清纯白嫩初高生在线观看91| 一区二区成人在线| 国产成人精品亚洲午夜麻豆| 91精品国模一区二区三区| 中文字幕中文字幕在线一区| 久久精品久久综合| 欧美日韩午夜精品| 1024精品合集| 国产一区二区三区| 欧美绝品在线观看成人午夜影视| 国产精品国产三级国产aⅴ无密码| 久久99精品久久久| 7777精品伊人久久久大香线蕉超级流畅 | 精品乱人伦一区二区三区| 亚洲欧美国产毛片在线| 丰满放荡岳乱妇91ww| 欧美tk—视频vk| 日韩不卡在线观看日韩不卡视频| 欧美中文字幕不卡| 青青草国产成人99久久| 欧美日韩一区二区在线观看| 亚洲欧美日韩一区二区 | 99re这里只有精品视频首页| 精品国产伦一区二区三区免费| 日韩**一区毛片| 欧美一区二区三区视频在线观看| 亚洲一区二区三区激情| 欧美在线你懂得| 亚洲曰韩产成在线| 欧美日韩国产精品成人| 亚洲成人综合视频| 欧美精品高清视频| 日本视频免费一区| 日韩免费一区二区三区在线播放| 美腿丝袜一区二区三区| 欧美精品一区二区高清在线观看| 日本不卡一区二区三区高清视频| 欧美一区二区观看视频| 久久国内精品视频| 国产午夜亚洲精品午夜鲁丝片| 国产乱色国产精品免费视频| 国产精品久久久久久久久图文区| av在线播放一区二区三区| 亚洲欧美福利一区二区| 欧美午夜精品久久久久久超碰| 日韩精品一卡二卡三卡四卡无卡| 69p69国产精品| 激情文学综合丁香| 国产精品成人在线观看| 在线观看日韩精品| 蜜桃传媒麻豆第一区在线观看| 精品卡一卡二卡三卡四在线| 成人高清视频在线观看| 亚洲一二三四久久| 日韩免费高清电影| 不卡的av电影| 亚洲成人激情自拍| 久久久九九九九| 在线一区二区视频| 蓝色福利精品导航| 亚洲欧美另类小说| 日韩一区二区三区四区| 成人高清在线视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产欧美日本一区视频| 欧美日韩激情在线| 成人综合在线观看| 日韩电影在线一区| 成人免费小视频| 精品久久国产97色综合| 91视频你懂的| 国产麻豆精品theporn| 亚洲一区在线观看免费观看电影高清| 精品国一区二区三区| 91电影在线观看| 国产一区 二区| 香蕉加勒比综合久久| 国产视频一区在线播放| 在线综合视频播放| 99re在线视频这里只有精品| 激情久久五月天| 日韩精品久久久久久| 亚洲黄色av一区| 国产欧美日韩在线视频| 4hu四虎永久在线影院成人| 91麻豆国产香蕉久久精品| 精品一区二区三区视频| 亚洲成人av一区二区三区| 亚洲婷婷综合久久一本伊一区 | 欧美日韩的一区二区| 99久久婷婷国产综合精品电影| 精品一区二区三区免费毛片爱 | 亚洲人一二三区| 国产亚洲一区二区在线观看| 日韩欧美一区二区不卡| 欧美日韩高清一区二区| 欧美日韩综合在线| 91精品办公室少妇高潮对白| 国产成人精品三级| 国产高清精品网站| 国产综合色在线| 久久综合综合久久综合| 日韩成人dvd| 日韩va欧美va亚洲va久久| 亚洲成a人v欧美综合天堂下载 | 欧美—级在线免费片| 久久久久久97三级| 国产农村妇女毛片精品久久麻豆 | 不卡一卡二卡三乱码免费网站| 国产呦精品一区二区三区网站| 麻豆精品视频在线| 精品在线观看免费| 久久91精品国产91久久小草| 久久精品二区亚洲w码| 免费看精品久久片| 激情国产一区二区| 国产成人av电影在线观看| 国产成人免费在线观看不卡| 国产一区二区免费在线| 成人免费视频免费观看| 成人深夜福利app| 色av成人天堂桃色av| 在线观看免费视频综合| 7777精品久久久大香线蕉 | 欧美日韩三级一区| 在线成人av影院| 2020国产精品| 国产精品国产三级国产有无不卡| 成人免费在线播放视频| 亚洲网友自拍偷拍| 麻豆国产精品官网| 国产精品一区二区在线播放| 高清不卡一区二区在线| 色综合久久久久综合99| 欧美日韩视频第一区| 久久综合精品国产一区二区三区 | 视频精品一区二区| 极品美女销魂一区二区三区| 国产成人精品亚洲午夜麻豆| 在线观看日韩毛片| 欧美电影精品一区二区| 国产精品初高中害羞小美女文| 亚洲aaa精品| 国产成人一级电影| 欧美日韩国产天堂| 欧美韩国日本不卡| 亚洲成人自拍一区| 高清beeg欧美| 91精品国产综合久久久久久漫画| 国产三区在线成人av| 亚洲国产一区二区三区青草影视 | 在线视频国产一区| 欧美电影免费观看完整版| 亚洲欧美综合在线精品| 奇米影视在线99精品| 91在线视频免费91| 日韩欧美高清在线| 亚洲综合清纯丝袜自拍| 国产成人精品免费网站| 在线不卡中文字幕播放| 综合网在线视频| 国产毛片精品一区| 欧美亚洲自拍偷拍| 国产精品初高中害羞小美女文| 日本91福利区| 欧美亚洲动漫另类| ...xxx性欧美| 国产精品影音先锋| 欧美妇女性影城| 亚洲午夜久久久久| 91尤物视频在线观看| 欧美国产一区二区在线观看| 久久精品国产77777蜜臀| 欧美性猛交xxxx乱大交退制版| 国产精品午夜久久| 国产曰批免费观看久久久| 欧美一区日韩一区| 亚洲国产一区二区a毛片| 色综合久久久久久久| 国产精品久久久久久久浪潮网站 | 久久久久九九视频| 看电影不卡的网站| 日韩欧美国产系列| 日韩av网站免费在线| 欧美日本一区二区三区四区| 亚洲免费毛片网站| 99国产精品久久久久| 国产精品人妖ts系列视频| 国产精选一区二区三区| 久久久久久99精品| 国产不卡在线播放| 欧美国产一区二区在线观看| 福利电影一区二区| 国产精品黄色在线观看| 丁香六月综合激情| 国产日产精品一区| 成人免费精品视频|