多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > SQL TUNING優化時可大幅提升性能的實戰技巧之一――讓計劃沿著索引跑

SQL TUNING優化時可大幅提升性能的實戰技巧之一――讓計劃沿著索引跑

來源:程序員人生   發布時間:2015-08-06 10:47:02 閱讀次數:3801次

我們進行SQL優化時,常常會碰到對大量數據集進行排序,然后從排序后的集合取前部份結果的需求,這類情況下,當我們依照常規思路去寫SQL時,系統會先讀取過濾取得所有集合,然落后行排序,再從排序結果取出極少許結果,這個進程中,大量數據的掃描讀取、過濾、排序會消耗掉大量的系統資源,SQL性能也會存在很大的問題,實踐中,幾分鐘乃至幾個小時不出結果的情況很常見。為了優化這類場景的SQL,我們常常會讓查詢順序掃描建在排序列上的索引,已避開大量的數據讀取和排序。

但實踐中發現,當索引列不在條件中出現時,ORACLE不會產生掃描索引的計劃,即便用hint也不能讓查詢沿著目的索引掃描,例如:

create table t1(c1 int,c2 char(10));

create index idx1_t1 on t1(c1);

select * from (

select  * from t1 order by c1)

where rownum<6;

很明顯,這類寫法會致使先讀取表,再進行排序,然后取前5條記錄,計劃以下:


如果我們這么寫,語義是1樣的,但會省去了大量的讀取和排序代價:

select /*+ index(t1,idx1_t1)*/* from t1 where rownum<6;

該SQL的履行計劃以下:


大家可以看到,該SQL并沒依照hint唆使,順序掃描idx1_t1索引,這是為何呢?個人猜想,多是Oracle優化器認為過濾條件內沒c1列,走索引比走FTS效力更低,所以,干脆就不斟酌走索引這類計劃,即便用hint也要疏忽,這點感覺有點不盡人意。那末,我們想甚么辦法才能讓優化器選擇掃描idx1_t1的計劃呢?我們只需要在where中加個c1列上的條件就能夠了,例如:

select /*+ index(t1,idx1_t1)*/* from t1 where rownum<6 and c1<>⑴;

這么修改后的計劃以下:


因而可知,我們優化類似場景時,只需滿足兩點:

1、排序列上存在索引;

2、where條件中有該索引列上的條件;

如果能實現依照索引掃描,性能有不計其數倍的提升也是非??赡艿?,這點在實踐中得到了驗證。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本无卡码高清免费观看 | 一级一级女人真片 | 国产亚洲一区在线 | 中文乱码35页在线观看 | 在线免费观看一级毛片 | 日本一区二区高清 | 好吊色永久免费视频大全 | 国产极品美女在线 | 亚洲jizzjizz中文在线播放 | 性欧美高清 | 欧美日韩国产一区 | 国产亚洲精品久久久久久久久激情 | 亚洲精品无码不卡 | 亚洲第一网站在线观看 | 欧美色啪 | 羞羞视频日本动漫免费网站 | 1024在线视频国产在线播放 | www.亚洲色图| 亚洲嫩草影院久久精品 | 91精品欧美一区二区综合在线 | 特一级黄色毛片 | 亚洲精品综合一区在线 | 久久99毛片免费观看不卡 | 国产精品第一页第一页 | 亚洲国产2017男人a天堂 | japanese日本护士 | 最近中文字幕免费高清mv | 国产精品免费久久久免费 | 亚洲成人福利网站 | 一区二区三区中文国产亚洲 | xxxxx性欧美hd另类 | 波多野结衣在线播放视频 | 亚洲欧美综合精品成 | 欧美性视频xxxxhd | 色干综合 | 亚洲qingse中文字幕久久 | 欧美777| 手机看片国产欧美日韩高清 | 亚洲区中文字幕 | 亚洲人成亚洲人成在线观看 | 精品一区二区三区高清免费不卡 |