mysql索引?這篇文章0基礎小白也能理解!

開講前且看下文:

	
	作爲一箇中國人,字典大家應該都認識,下至6歲學童,上至80老爺爺老奶奶都會用。現在,給你一本字典,

	再給你一個漢字,你能不能知道這個漢字的具體意思?組詞?相信大家都能做到。使用字典步驟大概如下:

		1:找讀音或者偏旁部首。

		2:根據讀音和偏旁提示的頁碼 快速定位到這個漢字
	
	試想,如果字典沒有目錄,讓大家找一個漢字,得需要多長時間?

	這麼大的工作量,換誰也幹不了吧?

	所以說,本文要講的 “索引”  ,大家在生活中已經接觸過了。比如書本的目錄,字典的目錄,超時貨櫃等

	

	總而言之,言而總之。索引的目的就是爲了加快數據的查詢。僅此而已

mysql中常用的索引類型?


	**普通索引**:它是最基本的索引,只是爲了加快數據的查詢速度

	**唯一索引**:也是加快查詢速度,不過索引列的值必須唯一,但允許有空值,如果是組合索引,那麼這個

	組合列值必須唯一。(例如:a列和b列建立組合索引,a列存儲一個1,b列存儲一個1,往後的存儲a和b

	就不能同時都是1了)

	**主鍵索引**:它是一種特殊的唯一索引,但不許用空值。一個表只許一個主鍵,且要求自增

	**組合索引**:  多個字段建立索引(a+b+c組成的組合索引什麼時候能用到?只要查詢where條件包含
	
	a字段的的都可用到)

	**全文索引**:  用來匹配數據(現在很少用啦)

mysql如何創建一個索引?


	alter table 表名 add 索引類型 index 索引名 索引字段 索引長度

索引好處這麼明顯?是不是越多越好呢?


	答案當然是否定的:
		
		雖然索引極大加快了數據的查詢速度,但卻會減緩更新速度,刪除,修改,插入都會變慢,因爲寫入數據

		時候,同時還要把索引文件進行保存(結合實際生活想一想:假如你寫了很多文章,要把這些文章組合成

		一本書,然後你寫了目錄,頁碼等,要看某一篇文章確實很快能找到,但是有一天你有寫了幾篇好文章
		
		想加到這本書裏,你總不能只是單純的把文章放到書後面吧,不然以後讀這篇文章不看目錄了?多慢!

		所以說,你每次新寫/更新/刪除一個文章,都得寫目錄,是不是影響了插入/更新/刪除速度?)


		總結:
		
		要根據自己實際的業務要求建立合理的索引,不要不建立索引,也不要建立太過於複雜的索引。

		取其中間就好

如何知道自己的查詢語句有沒有用到索引?


	只需要在查詢語句前面加上 mysql的執行計劃:  explain    (好用不貴)  會出現下圖

在這裏插入圖片描述

參數解析
  1. select_type 查詢的類型,主要用於區別普通查詢,聯合查詢,子查詢等複雜查詢
	參數詳情:
		
	simple:簡單的select查詢,查詢中不包含子查詢或union查詢
	
	primary:查詢中若包含任何複雜的子部分,最外層查詢則被標記爲primary

	subquery 在select 或where 列表中包含了子查詢

	derived 在from列表中包含的子查詢被標記爲derived,mysql會遞歸這些子查詢,把結果放在臨時表裏

	union 做第二個select出現在union之後,則被標記爲union,若union包含在from子句的子查詢中,
	
	外層select將被標記爲	derived

	union result 從union表獲取結果的select


  1. table :查詢的表名

  2. type:查詢類型從最好到最差依次是:system>const>eq_ref>ref>range>index>All,一般情況下,得至少保證達到range級別,最好能達到ref

  3. possible_keys 用於顯示可能會用到的索引

  4. key: 用於顯示實際使用的索引,如果爲null,表示沒用索引。

  5. key_len: 用到的索引長度

  6. ref 顯示索引的哪一列被使用了,如果可能的話是一個常數,哪些列或常量被用於查找索引列上的值

  7. rows : 估算大概檢索了多少行找到這條數據

  8. extra 系統給的查詢建議

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章