如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?-創(chuàng)新互聯(lián)

如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?

成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設(shè)、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計公司、網(wǎng)站定制、網(wǎng)絡(luò)營銷推廣、微信小程序開發(fā)、微信公眾號開發(fā)、成都網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為陽臺護(hù)欄企業(yè)提供源源不斷的流量和訂單咨詢。

 1)關(guān)于大表創(chuàng)建索引,如果從綜合考慮多個維度來看,我會考慮:

1. 為什么需要創(chuàng)建索引,即索引創(chuàng)建的之后的性能是否能夠提升

2. 創(chuàng)建什么樣的索引,即索引的類型

3. 創(chuàng)建索引的影響,此時需要了解索引的創(chuàng)建過程,以及如果優(yōu)化索引的創(chuàng)建效率以減少對業(yè)務(wù)的影響

4. 什么時候創(chuàng)建索引

5. 有沒有其他方式來替代這個過程

 2)以下關(guān)于幾種考慮因素的分析過程: 1.為什么需要創(chuàng)建索引

A. 結(jié)合應(yīng)用查詢場景,比如是否存在相應(yīng)關(guān)鍵業(yè)務(wù)的SQL需要使用到索引相關(guān)字段的條件,其SQL執(zhí)行頻繁是否較大;該部分業(yè)務(wù)SQL根據(jù)索引所返回的結(jié)果集大小,比如一個表有一個億,每次根據(jù)相應(yīng)條件返回了幾千萬的結(jié)果集,那創(chuàng)建該索引是否真正有效

B. 結(jié)合表數(shù)據(jù)分布情況,第一個是列數(shù)據(jù)選擇性問題,如果選擇性不高,有時索引回表的cost比全表掃描大,優(yōu)化器選擇執(zhí)行計劃路徑是可能不選擇索引。第二個列數(shù)據(jù)較為無序,導(dǎo)致創(chuàng)建索引后集群因子較高,增加索引回表成本等。

C. 結(jié)合表數(shù)據(jù)變化情況,,增加一個索引便需要多維護(hù)一個索引,對一張數(shù)據(jù)變化頻率較高的表,索引太多會增加dml操作特別是insert時的索引維護(hù)成本,影響執(zhí)行效率

   2.創(chuàng)建什么樣的索引

      A.如果使用多個條件便可以創(chuàng)建復(fù)合索引

      B.如果業(yè)務(wù)sql條件存在函數(shù),那就要考慮函數(shù)索引

      C.如果一個列基數(shù)較低,那是否考慮選擇位圖索引,前提是其列數(shù)據(jù)很少更新

      D.分區(qū)表是否創(chuàng)建本地索引

   3.創(chuàng)建索引的影響

       我們都知道創(chuàng)建索引會與dml操作相互影響以及還有大量的IO操作等。

   首先,是了解創(chuàng)建索引的過程,才能解決創(chuàng)建索引帶來的問題,我做了個創(chuàng)建索引的實驗,并通過10046追蹤,創(chuàng)建索引的主要過程如下:

A. 開始讀取數(shù)據(jù)字典如統(tǒng)計信息,對象信息等

B. 使用share mode nowait將表鎖住,此時其他會話只可讀該表但無法修改該表。

  如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?

C. 讀取一些信息等判斷后在obj$初始化索引對象信息

  如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?

  D.開始抓取表數(shù)據(jù)等一系列大量IO操作,該過程時間相對較長:

  如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?

E.往seg$,icol$,ind$等信息表中插入相應(yīng)信息

如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?

完成整個索引排序創(chuàng)建索引,掃描表

  如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?

從以上索引的創(chuàng)建過程,我們可以考慮的問題點總結(jié)是:

   A.此過程會加共享鎖以至于阻塞dml操作,因此創(chuàng)建索引盡量選擇業(yè)務(wù)空閑期進(jìn)行,同時也可以考慮online方式創(chuàng)建。

  B.此過程需要大量讀取表數(shù)據(jù)并排序操作,以及insert update操作,此時需要考慮存儲IO性能

  C.此過程會產(chǎn)生大量redo,可以考慮nologing模式

  D.同時需要考慮索引的空間大小,關(guān)注表空間和臨時表空間

  E.同時可以使用并行加快操作,這也是我們常做的。

4. 什么時候創(chuàng)建索引

     不用考慮,業(yè)務(wù)空閑期

5. 有沒有其他方式來替代這個過程

可以考慮數(shù)據(jù)遷移方式,創(chuàng)建一張新表添加索引,在線遷入數(shù)據(jù)后 rename表

文章名稱:如果你的系統(tǒng)需要在一張很大的表上創(chuàng)建一個索引,你會考慮哪些因素?-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article48/ejjhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、營銷型網(wǎng)站建設(shè)App開發(fā)、響應(yīng)式網(wǎng)站、云服務(wù)器電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)