mysql索引

1、什麼是索引?爲何要創建索引?算法

    索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,若是表中查詢的列有一個索引,MySQL可以快速到達一個位置去搜索數據文件,而沒必要查看全部數據,那麼將會節省很大一部分時間。優化

    例如:有一張person表,其中有2W條記錄,記錄着2W我的的信息。有一個Phone的字段記錄每一個人的電話號碼,如今想要查詢出電話號碼爲xxxx的人的信息。若是沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條信息爲止。若是有了索引,那麼會將該Phone字段,經過必定的方法進行存儲,好讓查詢該字段上的信息時,可以快速找到對應的數據,而沒必要在遍歷2W條數據了。其中MySQL中的索引的存儲類型有兩種:BTREEHASH。 也就是用樹或者Hash值來存儲該字段,要知道其中詳細是如何查找的,就須要會算法的知識了。咱們如今只須要知道索引的做用,功能是什麼就行。索引

2、 MySQL中索引的優勢和缺點和使用原則搜索

優勢:遍歷

  1. 全部的MySql列類型(字段類型)均可以被索引,也就是能夠給任意字段設置索引
  2. 大大加快數據的查詢速度

缺點:數據類型

  1. 建立索引和維護索引要耗費時間,而且隨着數據量的增長所耗費的時間也會增長
  2. 索引也須要佔空間,咱們知道數據表中的數據也會有最大上限若是咱們有大量的索引,索引文件可能會比數據文件更快達到上線值
  3. 當對錶中的數據進行增長、刪除、修改時,索引也須要動態的維護,下降了數據的維護速度。

使用原則:引用

     經過上面說的優勢和缺點,咱們應該能夠知道,並非每一個字段度設置索引就好,也不是索引越多越好,而是須要本身合理的使用。方法

  1. 對常常更新的表就避免對其進行過多的索引,對常常用於查詢的字段應該建立索引
  2. 數據量小的表最好不要使用索引,由於因爲數據較少,可能查詢所有數據花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。
  3. 在一同值少的列上(字段上)不要創建索引,好比在學生表的"性別"字段上只有男,女兩個不一樣值。相反的,在一個字段上不一樣值較多能夠創建索引。
  4. LIKE語句操做:通常狀況下,不建議使用LIKE操做;若是非使用不可,如何使用也是一個研究的課題。LIKE "%aaaaa%"不會使用索引,可是LIKE "aaa%"卻可使用索引。

3、索引的分類 數據

注意:索引是在存儲引擎中實現的,也就是說不一樣的存儲引擎,會使用不一樣的索引查詢

MyISAM和InnoDB存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,不可以更換MEMORY/HEAP存儲引擎:支持HASH和BTREE索引

     索引咱們分爲四類來說 單列索引(普通索引,惟一索引,主鍵索引)、組合索引、全文索引、空間索引

    1.單列索引  :一個索引只包含單個列,但一個表中能夠有多個單列索引。

  • 普通索引:MySQL中基本索引類型,沒有什麼限制,容許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。
  • 惟一索引:索引列中的值必須是惟一的,可是容許爲空值。
  • 主鍵索引:是一種特殊的惟一索引,不容許有空值。

    2.組合索引:在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合。索引只能用於查找key是否存在(相等),遇到範圍查詢(>、<、between、like左匹配)等就不能進一步匹配了,後續退化爲線性查找

    3.全文索引:全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引。

    4.空間索引:空間索引是對空間數據類型的字段創建的索引,MySQL中的空間數據類型有四種,GEOMETRY、POINT、LINESTRING、POLYGON。在建立空間索引時,使用SPATIAL關鍵字。要求,引擎爲MyISAM,建立空間索引的列,必須將其聲明爲NOT NULL。

相關文章
相關標籤/搜索