索引就像是書的目錄,是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引中包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在乙個結構(btree)中,使sql可以快速有效地查詢與鍵值關聯的行。
① 建立索引的列可以保證行的唯一性,生成唯一的rowid
② 建立索引可以有效縮短資料的檢索時間
③ 建立索引可以加快表與表之間的連線
④ 為用來排序或者是分組的字段新增索引可以加快分組和排序順序
① 建立索引和維護索引需要時間成本,這個成本隨著資料量的增加而加大
② 建立索引和維護索引需要空間成本,每一條索引都要佔據資料庫的物理儲存空間,資料量越大,占用空間也越大(資料表佔據的是資料庫的資料空間)
③ 會降低表的增刪改的效率,因為每次增刪改索引需要進行動態維護,導致時間變長
① 總的來說就是資料量大的,經常進行查詢操作的表要建立索引
② 表與表連線用於多表聯合查詢的約束條件的字段應當建立索引
③ 用於排序的字段可以新增索引,用於分組的字段應當視情況看是否需要新增索引。
④ 新增多列索引的時候,對應的多條件查詢可以觸發該索引的同時,索引最左側的列的單條件查詢也可以觸發。
⑤ 如果有些表注定只會進行查詢所有,也就沒必要新增索引,因為查詢全部只能進行全量搜尋即掃瞄全表。
表中字段建立索引應該遵循幾個原則:
越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體中都需要更少的空間,處理起來更快。
簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更複雜,處理起來也更耗時。
3)盡量避免null:應該指定列為not null。含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、乙個特殊的值或者乙個空串代替空值。
對非唯一的字段,例如「性別」這種大量重複值的字段,增加索引也沒有什麼意義,所以索引的建立應當更多的選取唯一性更高的字段。
索引的原理大致概括為以空間換時間,資料庫在未新增索引的時候進行查詢預設的是進行全量搜尋,也就是進行全域性掃瞄,有多少條資料就要進行多少次查詢,然後找到相匹配的資料就把他放到結果集中,直到全表掃瞄完。而建立索引之後,會將建立索引的key值放在乙個n叉樹上(btree)。因為b樹的特點就是適合在磁碟等直接儲存裝置上組織動態查詢表,每次以索引進行條件查詢時,會去樹上根據key值直接進行搜尋,次數約為log總條數,底數為頁面儲存數,例如乙個100萬資料的表,頁面儲存數為100,那麼有索引的查詢次數為3次log1000000100,但是全量搜尋為100萬次搜尋,這種方式類似於二分法,但是這個是n分法。
MS SQL入門基礎 資料庫索引
使用者對資料庫最頻繁的操作是進行資料查詢。一般情況下,資料庫在進行查詢操作時需要對整個表進行資料搜尋。當表中的資料很多時,搜尋資料就需要很長的時間,這就造成了伺服器的資源浪費。為了提高檢索資料的能力,資料庫引入了索引機制。本章將介紹索引的概念及其建立與管理。8.1.1 索引的概念 索引是乙個單獨的 ...
資料庫基礎 之 「索引」
索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。例如這樣乙個查詢 select from table1 whereid 44。如果沒有索引,必須遍歷整個表,直到id等於44的這一行被找到為止 有了索...
資料庫 SQL索引基礎
sql索引目錄 要想做好索引優化,知道索引的儲存結構是至關重要的。談到儲存就需要了解sql中的頁和區的概念 乙個區包含8個頁,它是管理空間的單位,分為如下兩類 一般情況下,給表或者索引申請新的空間時,從混合區分配,當這個表或者索引的空間超過8個頁大小時,會將原本在混合區的頁轉移到統一區管理。知識了區...