對部分行建立索引
背景:如果表中有一列的資料分布很不均勻,大部分是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...