国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

利用散列法來(lái)處理大的靜態(tài)統(tǒng)一表格

2024-07-21 02:38:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  數(shù)據(jù)庫(kù)中的散列法是使用計(jì)算值來(lái)分配表格數(shù)據(jù)的方法,它比在整個(gè)索引中搜索要好的多。一個(gè)哈希散列答應(yīng)你在數(shù)據(jù)庫(kù)表格中存儲(chǔ)數(shù)據(jù),以便這些行的要害計(jì)算的相同值存儲(chǔ)在相同的位置。
  
  為了在哈希散列中找到一個(gè)行,查詢機(jī)應(yīng)用哈希函數(shù)到一個(gè)行的要害值,然后分配和那個(gè)值相關(guān)的數(shù)據(jù)塊。在很多情況下,一個(gè)哈希散列比一個(gè)普通的索引快。
  
  Oracle在Oracle 7面世的時(shí)候就支持哈希散列。哈希散列的優(yōu)勢(shì)僅僅在于當(dāng)表格的訪問(wèn)在要害值上首先使用的是=操作符,這個(gè)表格是靜態(tài)的,并且僅僅當(dāng)數(shù)據(jù)行需要的時(shí)候。當(dāng)和一個(gè)普通非索引或者散列表格比較的時(shí)候,全表掃描就會(huì)變慢。
  
  比如,假設(shè)你想要?jiǎng)?chuàng)建一個(gè)表格來(lái)查找英語(yǔ)單詞的發(fā)音。你需要迅速的分配一個(gè)英語(yǔ)單詞的發(fā)音,但是一個(gè)字典,比如cmudict0.3有大概106,000個(gè)單詞。
  
  創(chuàng)建哈希散列最大的工作任務(wù)就是分析參數(shù)。你需要計(jì)算分析每個(gè)散列的帶和散列要害字包含的內(nèi)容數(shù)量。假如三類是正整數(shù),那么你可以設(shè)置最小值的大小假如你需要定義自己哈希函數(shù)。
  
  對(duì)于任何其他類型的數(shù)據(jù),比如下面這個(gè)列子,你需要計(jì)算參數(shù)的最小大小。你可以通過(guò)使用DBMS_UTILITY.GET_HASH_VALUE函數(shù)來(lái)獲得一個(gè)確切的估計(jì)。
  
  create table cmudict
  (
    Word varchar2(22) PRimary key,
    pron varchar2(62)
  );
  
  使用其他的快速裝入程序比如SQL*來(lái)裝入這些數(shù)據(jù):
  
  select max(blksize)
    from (select sum(3+nvl(vsize(word),0)+1+nvl(vsize(pron),0)+1) blksize
          from cmudict group by dbms_utility.get_hash_value(word,1,10007)) blkqry;
  
  NVL(VSIZE(col),0)+1表達(dá)式使用每個(gè)欄來(lái)分析字節(jié)的數(shù)字。3+是行的開(kāi)銷,所以表達(dá)式的總和是存儲(chǔ)每個(gè)行所需要的大小。在每個(gè)哈希函數(shù)組中,求和行的大小,我們獲得每個(gè)散列數(shù)據(jù)塊所許喲啊的字節(jié)數(shù)量。1是真的不切實(shí)際,但是10007,一個(gè)質(zhì)數(shù),是對(duì)哈希要害字參數(shù)的最好猜測(cè)。
  
  增加或者減少這個(gè)值到另外一個(gè)質(zhì)數(shù)知道上面的分析結(jié)果降低數(shù)據(jù)塊大小的重要性。這些數(shù)字,分析的結(jié)果和GET_HASH_VALUE的第三個(gè)參數(shù)應(yīng)該被使用來(lái)創(chuàng)造散列。
  
  現(xiàn)在你可以創(chuàng)造一個(gè)散列并使用這個(gè)散列存儲(chǔ)數(shù)據(jù)再創(chuàng)建一個(gè)表格。
  
  create cluster cmudict_cluster (word varchar2(22))
    size 6000
    single table
    hashkeys 739;
  create table cmudict
  (
    word varchar2(22) not null,
    pron varchar2(62)
  )
  cluster cmudict_cluster(word);
  
  假如你需要分析這個(gè)散列:
  
  analyze cluster cmudict_cluster compute statistics;
  select * from user_clusters where cluster_name = 'CMUDICT_CLUSTER';
  
  你可以看到AVG_BLOCKS_PER_KEY 是 1.
  
  可以為查詢語(yǔ)句做注解select * from cmudict where word = 'HELLO' returns:
  
  SELECT STATEMENT
   TABLE access HASH
  CMUDICT

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南通市| 保靖县| 唐河县| 桑植县| 二连浩特市| 武威市| 灵寿县| 蒲城县| 岳普湖县| 惠东县| 梅州市| 长子县| 东乡族自治县| 陆良县| 开化县| 治多县| 滨州市| 昌江| 乡城县| 绥滨县| 怀宁县| 雅安市| 民丰县| 特克斯县| 余姚市| 辽宁省| 大洼县| 永康市| 磴口县| 突泉县| 石棉县| 广饶县| 潍坊市| 青铜峡市| 来宾市| 运城市| 余干县| 长治县| 和平区| 手机| 晋州市|