distinct只對(duì)一列去重 Oracle很大的表distinct查詢?
Oracle很大的表distinct查詢?獨(dú)特的機(jī)制是兩個(gè)值逐個(gè)比較,需要遍歷整個(gè)表。如果桌子太大,那就是一場(chǎng)災(zāi)難。先統(tǒng)計(jì)后查詢分組,即先索引后查詢。桌子越大,效率越高。許多Oracle項(xiàng)目禁止使用d
Oracle很大的表distinct查詢?
獨(dú)特的機(jī)制是兩個(gè)值逐個(gè)比較,需要遍歷整個(gè)表。如果桌子太大,那就是一場(chǎng)災(zāi)難。
先統(tǒng)計(jì)后查詢分組,即先索引后查詢。桌子越大,效率越高。
許多Oracle項(xiàng)目禁止使用distinct語(yǔ)句,所有語(yǔ)句都由group by替換。在這種情況下,兩個(gè)表之間的關(guān)系通常是一對(duì)多的關(guān)系,因此會(huì)出現(xiàn)重復(fù)。在這種情況下,通常需要使用子查詢根據(jù)規(guī)則進(jìn)行重復(fù),然后再次關(guān)聯(lián)才能得到準(zhǔn)確的數(shù)據(jù)。但是,子查詢重復(fù)數(shù)據(jù)消除的邏輯需要基于您自己的業(yè)務(wù)。讓我給你一個(gè)隨機(jī)的例子:假設(shè)表a與表B相關(guān)聯(lián)(關(guān)聯(lián)的列是a),但是表B(列a、B、c)中有一些粒度重復(fù),我想在a.a=B.a上重復(fù)select*from tableA ajoin(select distinct a、B、c tableb)B