1.什麼是索引:
索引就像是書的目錄,是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引中包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在乙個結構(btree)中,使sql可以快速有效地查詢與鍵值關聯的行。
2. 為什麼要建立索引,即索引的優點:
① 建立索引的列可以保證行的唯一性,生成唯一的rowid
② 建立索引可以有效縮短資料的檢索時間
③ 建立索引可以加快表與表之間的連線
④ 為用來排序或者是分組的字段新增索引可以加快分組和排序順序
3.索引的缺點:
① 建立索引和維護索引需要時間成本,這個成本隨著資料量的增加而加大
② 建立索引和維護索引需要空間成本,每一條索引都要佔據資料庫的物理儲存空間,資料量越大,占用空間也越大(資料表佔據的是資料庫的資料空間)
③ 會降低表的增刪改的效率,因為每次增刪改索引需要進行動態維護,導致時間變長
4.什麼樣的表跟列要建立索引:
① 總的來說就是資料量大的,經常進行查詢操作的表要建立索引
② 表中字段建立索引應該遵循幾個原則:
1) 越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體中都需要更少的空間,處理起來更快。
2) 簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更複雜,處理起來也更耗時。
3) 盡量避免null:應該指定列為not null。含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、乙個特殊的值或者乙個空串代替空值。
4) 對非唯一的字段,例如「性別」這種大量重複值的字段,增加索引也沒有什麼意義,所以索引的建立應當更多的選取唯一性更高的字段。
③ 表與表連線用於多表聯合查詢的約束條件的字段應當建立索引
④ 用於排序的字段可以新增索引,用於分組的字段應當視情況看是否需要新增索引。
⑤ 新增多列索引的時候,對應的多條件查詢可以觸發該索引的同時,索引最左側的列的單條件查詢也可以觸發。
⑥ 如果有些表注定只會進行查詢所有,也就沒必要新增索引,因為查詢全部只能進行全量搜尋即掃瞄全表。
5.索引的原理:
索引的原理大致概括為以空間換時間,資料庫在未新增索引的時候進行查詢預設的是進行全量搜尋,也就是進行全域性掃瞄,有多少條資料就要進行多少次查詢,然後找到相匹配的資料就把他放到結果集中,直到全表掃瞄完。而建立索引之後,會將建立索引的key值放在乙個n叉樹上(btree)。因為b樹的特點就是適合在磁碟等直接儲存裝置上組織動態查詢表,每次以索引進行條件查詢時,會去樹上根據key值直接進行搜尋,次數約為log總條數,底數為頁面儲存數,例如乙個100萬資料的表,頁面儲存數為100,那麼有索引的查詢次數為3次log1000000100,但是全量搜尋為100萬次搜尋,這種方式類似於二分法,但是這個是n分法。
索引對增刪改的影響實際資料修改測試:
乙個表有字段a、b、c,同時進行插入10000行記錄測試
在沒有建索引時平均完成時間是2.9秒
在對a欄位建索引後平均完成時間是6.7秒
在對a欄位和b欄位建索引後平均完成時間是10.3秒
在對a欄位、b欄位和c欄位都建索引後平均完成時間是11.7秒
從以上測試結果可以明顯看出索引對資料修改產生的影響
關於資料庫索引的優缺點講解
通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因。可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。在使用分組和排序 子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。通過使用索引,可以在查詢的過程中,...
資料庫索引優缺點
建立索引的優點 建立索引可以大大提高系統效能!具體如下 1.通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。2.可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。3.可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。4.在使用分組和排序子句進行資料檢索時,同樣可...
資料庫索引優缺點
建立索引可以大大提高系統的效能 第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。第四,在使用分組和排序 子句進行資料檢索時,同樣可以顯著減少查詢...