談叢集索引,非叢集索引及在sqlite使用。

來源:互聯網
上載者:User

標籤:記錄   物理   預設   sql   完全   clust   優點   限制   資料   

叢集索引一個表只能有一個,而非叢集索引一個表可以存在多個。

叢集索引儲存記錄是物理上連續存在,而非叢集索引是邏輯上的連續,實體儲存體並不連續。

create clustered index  dcity on city(name)    // 建立叢集索引

create unclustered index dcity on city(name)   // 建立非叢集索引

先說優點:

  • 大大加快資料的檢索速度,這也是建立索引的最主要的原因
  • 加速表和表之間的串連,特別是在實現資料的參考完整性方面特別有意義。
  • 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。

再說缺點:

  • 建立索引需要耗費一定的時間,但是問題不大,一般索引只要build一次
  • 索引需要佔用物理空間,特別是叢集索引,需要較大的空間
  • 當對錶中的資料進行增加、刪除和修改的時候,索引也要動態維護,降低了資料的維護速度,這個是比較大的問題。

索引覆蓋: 索引所儲存的內容就是最終輸出的資料

 

Sqlite不支援叢集索引,android預設需要一個”_id”欄位,這保證了你插入的資料會按“_id”的整數順序插入,這個integer類型的主鍵就會扮演和叢集索引一樣的角色。所以不要再在對於聲明為:INTEGER PRIMARY KEY的主鍵上建立索引。

很多對索引不熟悉的朋友在表中建立了索引,卻發現沒有生效,其實這大多數和我接下來講的有關。對於where子句中出現的列要想索引生效,會有一些限制,這就和前置列有關。所謂前置列,就是在建立複合索引語句的第一列或者連續的多列。比如通過:CREATE INDEX comp_ind ON table1(x, y, z)建立索引,那麼x,xy,xyz都是前置列,而yz,y,z這樣的就不是。下面講的這些,對於其他資料庫或許會有一些小的差別,這裡以sqlite為標準。在where子句中,前置列必須使用等於或者in操作,最右邊的列可以使用不等式,這樣索引才可以完全生效。同時,where子句中的列不需要全建立了索引,但是必須保證建立索引的列之間沒有間隙。

談叢集索引,非叢集索引及在sqlite使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.