<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 54.1\. 索引的系統表記錄 每個索引訪問方法都在系統表`pg_am`里面用一行來描述(參閱[Section 47.3](#calibre_link-1492))。 一個`pg_am`行的主要內容是引用[`pg_proc`](#calibre_link-743) 里面的記錄,用來標識索引訪問方法提供的索引訪問函數。 這些函數的接口(API)在本章后面描述。另外,`pg_am`的數據行聲明了幾個索引訪問方法的固定屬性,比如,它是否支持多字段索引。 目前還沒有創建、刪除`pg_am`記錄的特殊支持;任何想寫這么一個新的訪問方法的人都需要能夠自己向這個表里面插入合適的新行。 要想有真正用處,一個索引訪問方法還必須有一個或多個_操作符族_和_操作符類_,定義在 [`pg_opfamily`](#calibre_link-732), [`pg_opclass`](#calibre_link-710), [`pg_amop`](#calibre_link-1493)和 [`pg_amproc`](#calibre_link-1494)里面。 這些記錄允許規劃器判斷哪些查詢的條件可以適用于用這個索引訪問方法創建的索引。 操作符族和操作符類在[Section 35.14](#calibre_link-54)里面定義,是讀取本章的前提之一。 一個獨立的索引是由一行 [`pg_class`](#calibre_link-578) 記錄以物理關系的方式描述的,加上一個[`pg_index`](#calibre_link-707) 行,表示該索引的邏輯內容 —也就是說,它所擁有的索引字段集,以及被相關的操作符類捕獲的這些字段的語義。 索引字段(鍵值)可以是下層表的字段,也可以是該表的數據行上的表達式。 索引訪問方法通常不關心索引的鍵值來自哪里(它總是操作經過預計算的鍵值),但是它會對`pg_index`里面的操作符類信息很感興趣。 所有這些系統表記錄都可以當作`Relation`數據結構的一部分訪問,這個數據結構會被傳遞到對該索引的所有操作上。 `pg_am`中的有些標志字段的含義并不那么直觀。 `amcanunique`的需求在[Section 54.5](#calibre_link-1170)里討論, `amcanmulticol`標志斷言該索引訪問方法支持多字段索引, `amoptionalkey`斷言它允許對那種在第一個索引字段上沒有給出可索引限制子句的掃描。 如果`amcanmulticol`為假,那么`amoptionalkey` 實際上說的是該訪問方法是否允許不帶限制子句的全索引掃描。 那些支持多字段索引的訪問訪法必須支持那些在省略了除第一個字段以外的其它字段的約束的掃描; 不過,系統允許這些訪問訪法要求在第一個字段上出現一些限制,這一點是通過把 amoptionalkey 設置為假來實現的。 一個訪問訪法可能設置`amoptionalkey`為假,如果它不索引NULL值的話。 因為大多數可以索引的操作符都是嚴格的,因此不能對 NULL 輸入返回 TRUE ,所以,第一眼看見會覺得不為 NULL 存儲索引記錄的想法很吸引人:因為他們不可能被一個索引掃描返回。 不過,這個想法在一個給出的索引字段上沒有限制子句的索引掃描的情況下就不行了;這樣的掃描應該包括 NULL 行。 實際上,這意味著設置了`amoptionalkey`為真的索引必須索引 NULL值 ,因為規劃器可能會決定在根本沒有掃描鍵字的時候使用這樣的索引。 這樣的索引必須可以在完全沒有掃描鍵字的情況下運行。 另外一個限制是一個支持多字段索引的索引訪問方法_必須_索引第一個字段后面的字段的 NULL值,因為規劃器會認為這個索引可以用于那些沒有限制這些字段的查詢。 比如,假設有個在(a,b)上的索引,而一個查詢的條件是`WHERE a = 4`。系統會認為這個索引可以用于掃描`a = 4`的數據行,如果索引忽略了`b`為空的數據行,那么就是錯誤的。 不過,如果第一個索引字段值是空,那么忽略它是 OK 的。 一個索引NULL值的索引訪問方法可能會設置`amsearchnulls`, 表明它支持`IS NULL` 和 `IS NOT NULL`子句作為搜索條件。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看