對部分行建立索引

2022-04-05 16:24:53 字數 1353 閱讀 5623

對部分行建立索引

背景:如果表中有一列的資料分布很不均勻,大部分是1,少部分是0,而且我們經常查詢的剛好是0,在這種情況下,走全表掃瞄的話,有些浪費資源,如果對該列建立索引的話,那些值為1的索引資料又有些浪費,因為我們很少去查詢值為1的資料,所以我們只對值為0的資料建立索引。

sql**  

create table t6(status char(1));  

begin      

for i in 1..100000 loop  

insert into t6 values('1');  

end loop;  

for i in 1..10 loop  

insert into t6 values('0');  

end loop;  

end;  

對status列建立索引

sql**  

create index idx_t6_status on t6(status);  

查詢索引占用的塊

sql**  

select index_name, i.leaf_blocks  

from user_indexes i  

where index_name = upper('idx_t6_status')  

sql**  

index_name  leaf_blocks  

x_t6_status 182  

看到索引葉子塊有182個,占用的比較多

下面我們只對status='0'建立索引來減少索引葉子塊

sql**  

drop index idx_t6_status;  

create index idx_t6_status on t6(decode(status,'0','0'));  

index_name leaf_blocks

sql**  

1   idx_t6_status   1  

可以看到索引葉子塊只有1個,數量減少了很多

通過索引查詢status值為'0'的資料

sql**  

select * from t6 where decode(status, '0', '0') = '0'  

執行計畫如下

sql**  

select statement, goal = all_rows           2   29  87  

table access by index rowid    carmot_develop  t6  2   29  87  

index range scan  carmot_develop  idx_t6_status   1   389     

mysql 部分索引 mysql建立部分索引

mysql中,字串如何建立索引的 本文中擷取一部分 只對字串的前幾個字元進行索引。通過字串的前幾個字元我們已經能大概排序字串了,剩下不能排序的可以通過遍歷進行查詢啊,這樣只在b 樹中儲存字串的前幾個字元的編碼,既節約空間,又減少了字串的比較時間,還大概能解決排序的問題,何樂而不為,比方說我們在建表語...

SOLR對多個(關聯)表建立索引

首先在資料庫建立一張表,本來有乙個tuser表了,我又建立了乙個role表,就兩三個字段,沒什麼特殊的,然後在裡面隨便新增幾條資料即可,看一下資料庫 資料庫建立完成之後就是修改data config.xml檔案了,因為資料庫跟solr之間的關聯主要就是建立在這個檔案上面的,所以接下來就是修改該檔案了...

Hive部分 行式儲存和列式儲存的比較

行式儲存和列式儲存的比較 列式儲存 columnar or column based 是相對於傳統關係型資料庫的行式儲存 row basedstorage 來說的。簡單來說兩者的區別就是如何組織表 row based storage stores atable in a sequence of ro...