友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第57章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






INPUT/OUTPUT 



    SQL》 SELECT * FROM BILLS ORDER BY ACCOUNT_ID; 



              NAME                          AMOUNT       ACCOUNT_ID 



               Phone pany                125          1 



               Power pany                75           1 



               Software pany             250          1 



               Florida Water pany        20           1 



               Record Club                  25           2 



               Cable TV pany             35           3 



               Debtor's Credit Card         35           4 



               Joe's Car Palace             350          5 



               U…O…Us Insurance pany     125          5 



               S。C。 Student Loan            200          6 



分析 



    它与使用 ID_INDEX  语句的结果是一样的                   不同之处在于当你使用 ORDER  BY  子句 



时每次运行它都需要重新进行排序                    而当你使用索引的时候              数据库会建立一个物理索引 



对象     就是前边提到的树结构  而在你每次运行查询时都访问同一个索引 



    警告    当表被删除时  所有与表相关的索引也将被删除 



                                                                                   213 


…………………………………………………………Page 214……………………………………………………………

SQL 21  日自学通(V1。0)                               翻译人 笨猪 



使用索引的技巧 



这里给出了几个在使用索引时需要记住的技巧 



l  对于小表来说    使用索引对于性能不会有任何提高 



l  当你的索引列中有极多的不同的数据和空值时索引会使性能有极大的提高 



l  当查询要返回的数据很少时索引可以优化你的查询           比较好的情况是少于全部数据的 



  25%  如果你要返回的数据很多时索引会加大系统开销 



l  索引可以提高数据的返回速度       但是它使得数据的更新操作变慢  在对记录和索引进 



  行更新时请不要忘记这一点       如果要进行大量的更新操作  在你执行更新操作时请不 



  要忘记先删除索引      当执行完更新操作后     只需要简单的恢复索引即可  对于一次特 



  定的操作  系统可以保存删除的索引 18  个小时  在这个时间内数据更新完后你可以恢 



  复它 



l  索引会占用你的数据库的空间       如果你的数据库管理系统允许你管理数据库的磁盘空 



   间  那么在设计数据库的可用空间时要考虑索引所占用的空间 



l  对字段的索引已经对两个表进行了归并操作         这一技术可以极大地提高归并的速度 



l  大多数数据库系统不允许你对视图创建索引  如果你的数据库系统允许这样做  那么 



  可以使用这种方法来在 SELECT    语句中对视图的数据进行排序       很不巧   一些数据库 



  系统中也不允许在视图中使用 ORDERY BY 子句 



l  不要创建对经常需要更新或修改的字段创建索引          更新索引的开销会降低你所期望获 



  得的性能 



l  不要将索引与表存储在同一个驱动器上         分开存储会去掉访问的冲突从而使结果返回 



  得更快 



对更多的字段进行索引 



   SQL  也允许你对多个字段进行索引  这种索引被称为复合索引         下边的代码是一个简 



单的复合索引的例子  注意虽然是对两个字段进行索引  但索引在物理结构上只有一个 



INPUT/OUTPUT 



   SQL》 CREATE INDEX ID_CMPD_INDEX ON BILLS( ACCOUNT_ID; AMOUNT ); 



   Index created。 



                                                     214 


…………………………………………………………Page 215……………………………………………………………

SQL 21  日自学通(V1。0)                                                  翻译人    笨猪 



    SQL》 SELECT * FROM BILLS; 



             NAME                       AMOUNT      ACCOUNT_ID 



             Florida Water pany      20          1 



             Power pany              75          1 



             Phone pany               125        1 



             Software pany           250         1 



             Record Club                25          2 



             Cable TV pany           35          3 



             Debtor's Credit Card       35          4 



             U…O…Us Insurance pany    125        5 



             Joe's Car Palace           350         5 



             S。C。 Student Loan          200         6 



    SQL》 DROP INDEX ID_CMPD_INDEX 



    Index dropped。 



分析 



    选择唯一值最多的列建立索引可以达到你所希望的性能                          例如  在 BILLS 表中 NAME 



字段中的每一个值都是唯一的               当使用复合索引时  要把最可能选择的字段放在前边                         也 



就是说  把你最经常在查询中使用是字段放在最前边                        在 CREATE  INDEX    中列的出现次 



序不必与表中的次序一致             如果你经常使用下边的语句 



    SQL》 SELECT * FROM BILLS WHERE NAME = 〃Cable TV pany〃; 



    为了想达到所期望的性能  你必须在索引中将 NAME 字段放在第一位                             这里有两个例 



子 



    SQL》 CREATE INDEX NAME_INDEX ON BILLS       NAME; AMOUNT 



    或 



    SQL》 CREATE INDEX NAME_INDEX ON BILLS       NAME 



    在这两个例子中 NAME          都在索引字段的最左边  所以这两个索引可以提高对 NAME 



的查询的性能 



    复合索引也可以根据他们自己的选择性来对两个以上的字段进行索引  作为一个选择 



性的例子  请看一下下边的这个表 



           ACCOUNT_ID      TYPE            BALANCE     BANK 



           1               Checking        500         First Federal 



           2               Money Market    1200        First Investor's 



                                                                            215 


…………………………………………………………Page 216……………………………………………………………

SQL 21  日自学通(V1。0)                                              翻译人    笨猪 



          ACCOUNT_ID      TYPE          BALANCE    BANK 



          3               Checking      90         Credit Union 



          4               Savings       400        First Federal 



          5               Checking      2500       Second Mutual 



          6               Business      4500       Fidelity 



    请注意输出的六个记录            checking 值在这里出现了三次          所以它的选择性要低于 



ACCOUUNT_ID    请注意     每一个 ACCOUNT_ID     的值都是唯一的  要想提高你的索引的 



选择性     你可以将 TYPE 字段与 ACCOUNT_ID        字段组合在一起建立一个索引             这将将创 



建一个唯一的索引值          当然  这也是你所能得到的最高的选择性 



注   一个索引可以包含多个列通常是指复合索引                   复合索引的性能与单个字段的索引相比 



   是无法断定的        以 ORACLE  为例    如果你在查询条件中经常指定某一特定的列那个你 



   可以创建这个列的索引  而当你的查询需要复合条件时你可以创建复合索引                               当创建 



   多个索引的时候你需要参考你所选定的解释器的帮助信息以从中得到确定的复合索引 



   的用法 



在创建索引时使用 UNIQUE  关键字 



    复合索引通常使用 UNIQUE        关键字来防止有相同数据的多个记录多次出现  例如                     如 



果你想要 BILLS  表具有下边的规则           每一个账单的交付公司都必须有不同的银行账号                    你 



需要创建一个包括 NAME  和 ACCOUNT_ID            的唯一索引  不幸的是 ORACLE7          不支持 



UNIQUE 语法    它是用 UNIQUE  完整性约束来达到内容唯一这一特性的                   下边的例子中给 



出了在 Sybase 的Transact…SQL 语言中 UNIQUE 关键字的用法 



INPUT 



    1》 create unique index unique_id_name 



    2》 on BILLS(ACCOUNT_ID; NAME) 



    3》 go 



    1》 select * from BILLS 



    2》 go 



OUTPUT 



             NAME                     AMOUNT     ACCOUNT_ID 



             Florida Water pany    20         1 



                                                                       216 


…………………………………………………………Page 217……………………………………………………………

SQL 21  日自学通(V1。0)                                                       翻译人    笨猪 



              NAME                         AMOUNT      ACCOUNT_ID 



              Power pany                75           1 



              Phone pany                125          1 



              Software pany             250          1 



              Record Club                  25           2 



              Cable TV pany             35           3 



              Debtor's Credit 
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!