在不清楚資料表欄位資料分佈的情況下,應該建立什麼型別的索引?
在討論之前,先看看關係型資料庫常見的索引型別:
1.點陣圖索引,適用於該欄位重複資料很多的情況;
2.B+樹索引,適用於該欄位重複資料不多的情況。
在不清楚資料表欄位資料分佈的情況下,應該建立什麼型別的索引?個人覺得以上兩種都不太適用,可以嘗試使用第3類的索引:
3.倒排索引,在搜尋引擎使用較多,適用於大多數的情況。
使用普通的文字檔案格式儲存倒排索引,格式為:
value:rowid(行標識碼),欄位值對應value,rowid對應該行的標識碼。
要注意的是,在建立倒排索引時,倒排索引的key需要按ascii碼排序。
同時,為了加快搜尋的速度,為倒排索引建立索引的後設資料,包括:
1.倒排索引檔案的最大值和最小值。
2.倒排索引檔案索引。
樣例後設資料如下:
[data]
min:1(該欄位最小值)
max:100(該欄位最大值)
[index]
1:value,offset(索引檔案第1行的欄位值和索引檔案的偏移量)
10000:value,offset(索引檔案第10000行的欄位值和索引檔案的偏移量)
......
n:value,offset(索引檔案第n行的欄位值和索引檔案的偏移量)
在實際查詢時,給出查詢條件,透過讀取索引的後設資料可以很快的定位到該查詢條件對應的倒排索引,再透過倒排索引查詢資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-1991374/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【轉】修改表的欄位資料型別的方法資料型別
- ORACLE MYSQL中join 欄位型別不同索引失效的情況OracleMySql型別索引
- oracle分表效率,資料庫分庫分表是什麼,什麼情況下需要用分庫分表Oracle資料庫
- java查詢資料庫,int型欄位為null的情況Java資料庫Null
- Mysql兩種情況下更新欄位中部分資料的方法MySql
- 修改欄位資料型別的方法資料型別
- Java資料型別與資料庫欄位型別對應關係Java資料型別資料庫
- 資料欄位型別匹配型別
- 資料庫分割槽表 什麼情況下需要分割槽資料庫
- 企業在什麼情況下引入分散式資料庫?分散式資料庫
- Oracle-不刪表資料,修改欄位型別Oracle型別
- 保留資料庫表中的資料,把表中的欄位varchar2改成clob型別資料庫型別
- 主流資料庫欄位型別轉.Net型別的方法資料庫型別
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- MSSQL資料庫的欄位型別總結SQL資料庫型別
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- 什麼情況下需要搭建大資料平臺大資料
- ABAP 動態備份自建表資料到新表(自建表有資料的情況下要改欄位長度或者其他)
- 用Elasticsearch做大規模資料的多欄位、多型別索引檢索Elasticsearch多型型別索引
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- 資料庫中欄位資料型別以及約束資料庫資料型別
- 轉載:Oracle常用的資料庫欄位型別Oracle資料庫型別
- 為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...資料庫型別
- 資料型別是什麼?Python的資料型別又有哪些?資料型別Python
- WHRER條件裡的資料型別必須和欄位資料型別一致資料型別
- 在 mysql 下 建立新的資料庫和對應的表MySql資料庫
- 在資料倉儲建模時,應該使用哪種資料型別的度量值資料型別
- SQL 語句調優_SQL傳遞引數的資料型別與表索引欄位型別保持一致SQL資料型別索引
- 什麼情況下需要建立索引? 索引的作用?為什麼能夠提高查詢速度?(索引的原理) 索引有什麼副作用嗎?索引
- SQL SERVER 查詢表的欄位名、資料型別和最大長度SQLServer資料型別
- MySQL什麼情況下刪除資料會釋放空間MySql
- Oracle查詢資料表結構(欄位,型別,大小,備註)Oracle型別
- oracle 資料庫設定表和欄位的別名Oracle資料庫
- 修改表的欄位型別型別
- OCM實驗-建立含特殊欄位型別的表型別
- 如何檢視型別為LRAW的SAP ABAP資料庫表欄位的內容型別資料庫
- 只有官方文件的情況下建立資料庫需要參考的文件資料庫
- 修復identity 型別欄位資料的跳躍(轉)IDE型別