志當存高遠,功到自然成!

          少年強則中國強,少年進步則中國進步!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            53 Posts :: 2 Stories :: 2 Comments :: 0 Trackbacks

          在Sybase中我們可以象在Oracle那樣給予查尋提示嗎?如何做呢?
          發表于04年8月9日

            象Oracle系統那樣,在Sybase中優化器提示可以更改優化器。它們應當更慎重地使用。當數據建模正確實行,必要的索引存在,及時地更新統計,仔細編寫代碼后,ASE優化器可以完成出色的優化工作。

          ASE允許你說明優化器改動如下:
          [ SET FORCEPLAN ON ]

          SELECT columns
            FROM table ( [ INDEX indid or name | PREFETCH size | MRU | LRU ] )
           WHERE columns = something

          UPDATE table
             SET columns = something
            FROM table ( [ INDEX indid or name | PREFETCH size | MRU | LRU ] )
           WHERE columns = something

          DELETE table
            FROM table ( [ INDEX indid or name | PREFETCH size | MRU | LRU ] )
           WHERE columns = something

          [ SET FORCEPLAN OFF ]

          指定索引

            通過用關鍵字INDEX及說明indid或索引名稱你可以強制使用特定的索引,如果你必須強迫使用一個索引,你應當一直用索引名稱而不是indid。這是因為indid是根據生成的次序分派給許多索引,例行的數據庫維護會改變indid。

          你也可以用( INDEX 0 )來定義一個圖表掃描。這意味著ASE要進行一次全圖表掃描。


          強制索引
          SELECT columns
            FROM table ( INDEX index_name )
           WHERE columns = something

          UPDATE table
             SET columns = something
            FROM table ( INDEX index_name )
           WHERE columns = something

          DELETE table
            FROM table ( INDEX index_name )
           WHERE columns = something

          To force a Full Table Scan:
          SELECT columns
            FROM table ( INDEX 0 )
           WHERE columns = something

          UPDATE table
             SET columns = something
            FROM table ( INDEX 0 )
           WHERE columns = something

          DELETE table
            FROM table ( INDEX 0 )
           WHERE columns = something


            象我們前面提到的,使用提示會引起應用維護和最甲優化策略的應用問題,如果你要強制實施索引或圖表掃描,不要在應用代碼內執行。用索引或圖表掃描生成一個view,用view作為圖表。這將使你的維護方便很多,并且指明了強制索引或圖表掃描的對象。

          例如

          CREATE
            VIEW vw_[index_name | scan]_test_table
          AS
          SELECT columns
            FROM table ( INDEX index_name | 0 )
          go


          這段語句訪問了圖表,強制實施了一種方法,并可以用作view


          例如

          SELECT columns
            FROM vw_[index_name | scan]_table
           WHERE columns = something

          UPDATE table
             SET columns = something
            FROM vw_[index_name | scan]_table
           WHERE columns = something

          DELETE table
            FROM vw_[index_name | scan]_table
           WHERE columns = something

          連接次序

          用SET FORCEPLAN [ ON | OFF ]實施連接次序

            警告!!!實施連接次序會增加應用的維護工作。另外系統的發展也會產生一條更有效的途徑。

            根據選項設定的SET FORCEPLAN ON all查尋將用它們在查尋中FROM子句的次序來連接。

          例如
          SET FORCEPLAN ON

          SELECT t1.columns
            FROM table1 t1,
                 table2 t2
           WHERE t1.column01 = t2.column01

          SET FORCEPLAN OFF
          go

            在前面的例子中,我們強制ASE在作為Outer圖表的test_table1上進行掃描,根據統計情況這可能是一件很壞的事,只要非常熟練的DBA才能用這樣的邏輯來實施。

          主站蜘蛛池模板: 万山特区| 汾阳市| 正安县| 阜宁县| 莲花县| 疏附县| 盐边县| 阿巴嘎旗| 敦化市| 洛阳市| 陕西省| 东港市| 调兵山市| 抚顺市| 麻栗坡县| 隆昌县| 高阳县| 赤水市| 开封市| 广平县| 克拉玛依市| 石阡县| 抚州市| 平山县| 昭通市| 扶沟县| 曲沃县| 重庆市| 卢湾区| 措美县| 邢台市| 海盐县| 仁化县| 浙江省| 泌阳县| 武胜县| 靖远县| 土默特右旗| 错那县| 桑日县| 电白县|