1. 程式人生 > >909422229_資料庫索引的建立、使用、優缺點

909422229_資料庫索引的建立、使用、優缺點

技術交流群:958923746,有學習視訊,文件等。

一、索引的定義

在關係資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。

二、索引建立的規則:

   1、索引應該經常建在Where子句經常用到的列上。如果某個大表經常使用某個欄位進行查詢,並且檢索行數小於總錶行數的5%。則應該考慮。

 2、對於兩表連線的欄位,應該建立索引。如果經常在某表的一個欄位進行Order By 則也經過進行索引。

 3、不應該在小表上建設索引。

    4.應該建立在選擇性高的欄位上,選擇性越高,那麼索引的效率越好、價值越大,唯一索引的選擇性最高

    5.組合索引中欄位的順序,選擇性越高的欄位排在最前面

三、什麼時候需要建立索引

   1.對於那些在查詢中很少使用或者參考的列不應該建立索引

   2.對於那些只有很少資料值的列也不應該增加索引

   3.對於那些定義為text, image和bit資料型別的列不應該增加索引

   4.當修改效能遠遠大於檢索效能時,不應該建立索引。這是因為,修改效能和檢索效能是互相矛盾的。

四、優點

  1、索引主要進行提高資料的查詢速度。

  2.索引是佔物理空間的,索引是在資料庫中另外開闢一塊空間,將資料存放到了空間中。在查詢的時候直接從空間中獲取,無需進行庫表查詢,查詢效率明顯提高。

五、缺點

  1、當進行DML時,會更新索引。因此索引越多,則DML越慢,其需要維護索引。 因此在建立索引及DML需要權衡,並不是建立的索引越多越好。

  2.索引在建立與動態維護上需要大量時間,如果一個表中有頻繁更新的資料,那麼索引空間中會進行資料動態維護,浪費了大量時間。

六、索引失效的情況:

 

① Not Null/Null 如果某列建立索引,當進行Select * from emp where depto is not null/is null。 則會是索引失效。

  ② 索引列上不要使用函式,SELECT Col FROM tbl WHERE substr(name ,1 ,3 ) = 'ABC' 

或者SELECT Col FROM tbl WHERE name LIKE '%ABC%' 而SELECT Col FROM tbl WHERE name LIKE 'ABC%' 會使用索引。

 ③ 索引列上不能進行計算SELECT Col FROM tbl WHERE col / 10 > 10 則會使索引失效,應該改成

SELECT Col FROM tbl WHERE col > 10 * 10

 ④ 索引列上不要使用NOT ( != 、 <> )如:SELECT Col FROM tbl WHERE col ! = 10  應該 改成:SELECT Col FROM tbl WHERE col > 10 OR col < 10 。

七、索引的建立