真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Mysql索引詳細(xì)介紹

這篇文章主要介紹“MySQL索引詳細(xì)介紹”,在日常操作中,相信很多人在Mysql索引詳細(xì)介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mysql索引詳細(xì)介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為江永企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),江永網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

 

一、index是什么?

 

1. 定義

  1. 簡述:索引(Index)是一種幫助mysql高效獲取數(shù)據(jù)的一數(shù)據(jù)結(jié)構(gòu)。

  2. 詳述:除數(shù)據(jù)本身外,數(shù)據(jù)庫還維護著一個滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式指向數(shù)據(jù),這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實現(xiàn)高級查找算法,這種數(shù)據(jù)結(jié)構(gòu)叫索引。

Mysql索引詳細(xì)介紹  
索引數(shù)據(jù)對應(yīng)關(guān)系示意圖
## 1. 創(chuàng)建索引
mysql> create index idx_employee_username on employee(username);
Query OK, 0 rows affected (1.71 sec)
Records: 0  Duplicates: 0  Warnings: 0

## 2. 查詢索引。從查詢結(jié)果來看,索引的類型是B樹
mysql> show index from employee;
+----------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table    | Non_unique | Key_name              | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+----------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| employee |          1 | idx_employee_username |            1 | username    | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+----------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (1.73 sec)

 

注意:索引本身也很大,不可能全部存儲在內(nèi)存中,因此索引索引往往以索引文件的形式存儲到磁盤中;如果沒有特定說明,索引對應(yīng)的數(shù)據(jù)結(jié)構(gòu)都是B樹。

 

2. B樹簡介

B樹:它的設(shè)計思想是,將相關(guān)數(shù)據(jù)盡量集中在一起,以便一次讀取多個數(shù)據(jù),減少硬盤操作次數(shù)。是對二叉查找樹的改進。Mysql索引詳細(xì)介紹有以下三個特點:

  1. 一個節(jié)點可以容納多個值。
  2. 除非數(shù)據(jù)已經(jīng)填滿,否則不會增加新的層。
  3. 子節(jié)點中的值,與父節(jié)點中的值,有嚴(yán)格的大小對應(yīng)關(guān)系。一般來說,如果父節(jié)點有a個值,那么就有a+1個子節(jié)點。比如上圖中,父節(jié)點有兩個值(7和16),就對應(yīng)三個子節(jié)點,第一個子節(jié)點都是小于7的值,最后一個子節(jié)點都是大于16的值,中間的子節(jié)點就是7和16之間的值。
  4. 是一種排好序的快速查找數(shù)據(jù)結(jié)構(gòu)。
 

二、index的分類及其使用

 

1. 分類

  1. 單值索引:即一個索引只包含一個列(一個表可包含多個單值索引)。
  2. 復(fù)合索引:一個索引包含多個列。
  3. 唯一索引:索引列的值必須唯一,可以為null。
 

2. 基本語法

  1. 創(chuàng)建:     CREATE [UNIQUE] INDEX indexName ON tableName(columnName);和     ALERT tableName ADD [UNIQUE] INDEX indexName ON (columnName);
  2. 刪除:     DROP INDEX [indexName] ON tableName;
  3. 查看:     SHOW INDEX FROM tableName;
 

三、index的優(yōu)缺點?

 

1. 優(yōu)點

  1. ==提高數(shù)據(jù)索引效率,降低數(shù)據(jù)庫的io成本。== 索引采取BTREE數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu),非常有利于減少硬盤的讀取次數(shù)。假定一個節(jié)點可以容納100個值,那么3層的B樹可以容納100萬個數(shù)據(jù)!假定操作系統(tǒng)一次讀取一個節(jié)點,并且根節(jié)點保留在內(nèi)存中,那么B樹在100萬個數(shù)據(jù)中查找目標(biāo)值,只需要讀取兩次硬盤。
  2. 通過索引列對數(shù)據(jù)進行排序,降低數(shù)據(jù)排序的成本,降低了cpu的消耗。
 

2. 缺點

  1. 索引本身也是一種表,該表保存了主鍵和索引字段,并指向?qū)嶓w表的記錄,索引也需要占用空間。
  2. 雖然極大的提高了查詢速率,但是會降低表的更新速度(update、delete和insert),因為更新表時不僅要保存數(shù)據(jù),還要對應(yīng)更新索引的。
  3. 索引只是提高效率的一個因素,如果有大數(shù)據(jù)量的表,需要花時間建立最優(yōu)秀索引。
 

四、index的使用場景?不適合使用場景?

 

1. 適用場景(表的數(shù)據(jù)量較大)

  1. 主鍵自動建立唯一索引
  2. 頻繁作為查詢條件的字段應(yīng)該創(chuàng)建索引
  3. 查詢中與其它表關(guān)聯(lián)的字段,外鍵關(guān)系建立索引
  4. 查詢中排序的字段應(yīng)該創(chuàng)建索引
  5. 查詢中統(tǒng)計或分組字段
 

2. 不適用場景

  1. 頻繁更新的字段或表不適合建立索引(降低更新效率)。
  2. where條件中沒有使用到的字段不創(chuàng)建索引(浪費空間)。
  3. 表的數(shù)據(jù)量少,不適合建立索引。
  4. 數(shù)據(jù)列重復(fù)率高的不適合建立索引,比如性別:男,女。只有這兩個字段,建立索引意義不大。
 

五、性能分析

 

1. Mysql query Optimizer(mysql查詢優(yōu)化器)

mysql中有專門負(fù)責(zé)優(yōu)化SELECT語句的優(yōu)化器,主要功能:通過計算分析系統(tǒng)中收集到的統(tǒng)計信息,為客戶端請求的Query提高其默認(rèn)的最優(yōu)執(zhí)行計劃(可能和我們認(rèn)為的最優(yōu)相違背,這部分耗費時間最長)

 

2. 常見性能瓶頸

  1. CPU:cpu在飽和的時候數(shù)據(jù)一般發(fā)生在裝入內(nèi)存或者從磁盤上讀取數(shù)據(jù)
  2. IO:磁盤I/O瓶頸發(fā)生在裝入數(shù)據(jù)遠(yuǎn)大于內(nèi)存容量的時候
  3. 服務(wù)器硬件性能瓶頸:top,free,iostat和vmstat來查看定位
 

3. SQL語句問題

Explain解釋執(zhí)行可查看sql運行狀態(tài),語法如下:EXPLAIN sql語句

mysql> explain select * from employee where username='jhon';
+----+-------------+----------+------------+------+-----------------------+-----------------------+---------+-------+------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys         | key                   | key_len | ref   | rows | filtered | Extra |
+----+-------------+----------+------------+------+-----------------------+-----------------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | employee | NULL       | ref  | idx_employee_username | idx_employee_username | 83      | const |    1 |   100.00 | NULL  |
+----+-------------+----------+------------+------+-----------------------+-----------------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

到此,關(guān)于“Mysql索引詳細(xì)介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
本文題目:Mysql索引詳細(xì)介紹
轉(zhuǎn)載來于:http://weahome.cn/article/goggoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部