熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

數據庫基礎:講解MySQL索引的概念及數據庫索引的應用[2]

2022-06-13   來源: MySQL 

  五索引分類

  直接創建索引和間接創建索引

  直接創建索引 CREATE INDEX mycolumn_index ON mytable (myclumn)

  間接創建索引定義主鍵約束或者唯一性鍵約束可以間接創建索引

  普通索引和唯一性索引

  普通索引CREATE INDEX mycolumn_index ON mytable (myclumn)

  唯一性索引保證在索引列中的全部數據是唯一的對聚簇索引和非聚簇索引都可以使用

  CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

  單個索引和復合索引

  單個索引即非復合索引

  復合索引又叫組合索引在索引建立語句中同時包含多個字段名最多個字段

  CREATE INDEX name_index ON username(firstnamelastname)

  聚簇索引和非聚簇索引(聚集索引群集索引)

  聚簇索引物理索引與基表的物理順序相同數據值的順序總是按照順序排列

  CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH

  ALLOW_DUP_ROW(允許有重復記錄的聚簇索引)

  非聚簇索引CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

  六索引的使用

  當字段數據更新頻率較低查詢使用頻率較高並且存在大量重復值是建議使用聚簇索引

  經常同時存取多列且每列都含有重復值可考慮建立組合索引

  復合索引的前導列一定好控制好否則無法起到索引的效果如果查詢時前導列不在查詢條件中則該復合索引不會被使用前導列一定是使用最頻繁的列

  多表操作在被實際執行前查詢優化器會根據連接條件列出幾組可能的連接方案並從中找出系統開銷最小的最佳方案連接條件要充份考慮帶有索引的表行數多的表;內外表的選擇可由公式外層表中的匹配行數*內層表中每一次查找的次數確定乘積最小為最佳方案

  where子句中對列的任何操作結果都是在sql運行時逐列計算得到的因此它不得不進行表搜索而沒有使用該列上面的索引;如果這些結果在查詢編譯時就能得到那麼就可以被sql優化器優化使用索引避免表搜索(例select * from record where substring(card_no)=

  && select * from record where card_no like %)任何對列的操作都將導致表掃描它包括數據庫函數計算表達式等等查詢時要盡可能將操作移至等號右邊

  where條件中的in在邏輯上相當於or所以語法分析器會將in (′)轉化為column=′ or column=′來執行我們期望它會根據每個or子句分別查找再將結果相加這樣可以利用column上的索引;但實際上它卻采用了or策略即先取出滿足每個or子句的行存入臨時數據庫的工作表中再建立唯一索引以去掉重復行最後從這個臨時表中計算結果因此實際過程沒有利用column上索引並且完成時間還要受tempdb數據庫性能的影響inor子句常會使用工作表使索引失效;如果不產生大量重復值可以考慮把子句拆開;拆開的子句中應該包含索引

  要善於使用存儲過程它使sql變得更加靈活和高效

[]  []  


From:http://tw.wingwit.com/Article/program/MySQL/201311/29603.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.