MySQL之索引詳解

華子目錄

  • 索引概述
    • 優缺點
  • 索引的原理
  • 索引的設計原則
  • 索引結構
    • B-tree(多路平衡查找樹)
    • B+tree
    • Hash
  • 為什么InnoDB存儲引擎選擇B+tree?
  • 索引分類
    • 聚集索引選取規則
  • 單列索引和多列索引
  • 前綴索引
  • 創建索引
    • 1.創建表時創建索引
    • 2.在已經存在的表上創建索引
    • 3.使用alter table語句創建索引
  • 使用計劃查詢SQL使用索引情況(==explain==)
  • 查看索引
  • 刪除索引
  • 案例

索引概述

  • 索引(index) 是幫助MySQL高效獲取數據數據結構(有序)。在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構上實現高級查找算法,這種數據結構就是索引
  • 在這里插入圖片描述
  • 無索引時,需要一條一條查找每一條數據,有索引時就不需要逐一查詢數據
  • 在數據庫中用來加速對表的查詢;通過使用快速路徑訪問方法快速定位數據,減少了磁盤的I/O;與表獨立存放,但不能獨立存在,必須屬于某個表;由數據庫自動維護,表被刪除時,該表上的索引自動被刪除;
  • 索引的作用類似于書的目錄,幾乎沒有一本書沒有目錄,因此幾乎沒有一張表沒有索引。

優缺點

  • 在這里插入圖片描述

索引的原理

就是把無序的數據變成有序的查詢

  1. 把創建的索引的列的內容進行排序
  2. 對排序結果生成倒排表
  3. 在倒排表內容上拼上數據地址鏈
  4. 在查詢的時候,先拿到倒排表內容,再取出數據地址鏈,從而拿到具體數據

索引的設計原則

為了使索引的使用效率更高,在創建索引的時候必須考慮在哪些字段上創建索引和創建什么類型的索引。

  1. 選擇惟一性索引
  2. 為經常需要排序、分組和聯合操作的字段建立索引
  3. 為常作為查詢條件的字段建立索引
  4. 限制索引的數目
  5. 盡量使用數據量少的索引
  6. 盡量使用前綴來索引
  7. 刪除不再使用或者很少使用的索引

索引結構

MySQL的索引是在存儲引擎層實現的,不同的存儲引擎有不同的結構,主要包含以下幾種:

索引結構描述
B+tree索引最常見的索引類型,大部分引擎都支持B+tree索引
Hash索引底層數據結構是用哈希表實現的,只有精確匹配索引列的查詢才有效,通常使用較少
R-tree(空間索引)空間索引是MyISAM引擎的一個特殊索引類型,主要用于地理空間數據類型,通常使用較少
Full-text(全文索引)是一種通過建立倒排索引,快速匹配文檔的方式。類似于Lucene,Solr,ES

在這里插入圖片描述
在這里插入圖片描述

B-tree(多路平衡查找樹)

在這里插入圖片描述

B+tree

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

Hash

在這里插入圖片描述
在這里插入圖片描述

為什么InnoDB存儲引擎選擇B+tree?

在這里插入圖片描述

索引分類

分類含義特點關鍵字
主鍵索引針對于表中主鍵創建的索引默認自動創建,只能存在一個primary
唯一索引避免同一個表中某數據列中的值重復可以有多個unique
常規索引快速定位特定數據可以有多個
全文索引全文索引查找的是文本中的關鍵字,而不是比較索引中的值可以有多個fulltext

在InnoDB存儲引擎中,根據索引的存儲形式,又可以分為以下兩種:

分類含義特點
聚集索引將數據存儲與索引放到了一塊,索引結構的葉子節點保存了完整的行數據必須存在,且只有一個
非聚集索引(二級索引)將數據與索引分開存儲,索引結構的葉子節點關聯的是對應的主鍵可以存在多個

聚集索引選取規則

  • 如果存在主鍵主鍵索引就是聚集索引
  • 如果不存在主鍵,將使用第一個唯一(unique)索引作為聚集索引
  • 如果沒有主鍵,也沒有合適的唯一索引,則InnoDB會自動生成一個rowid作為隱藏的聚集索引

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 第一個執行效率高:因為第一個查的是主鍵索引,只查一張表。第二個先查name字段的索引,再根據name字段的索引值進行回表查詢,查兩張表。

單列索引和多列索引

MySQL中的單列索引和多列索引都是用于提高數據庫查詢效率的工具,它們有一些不同之處。

  1. 單列索引

    • 單列索引是針對表中的單個列創建的索引。
    • 它可以加速針對該列的查找、排序和過濾操作。
    • 適用于單列條件查詢,例如:SELECT * FROM table WHERE column = value;
    • 單列索引可以包括在多列查詢中,但只有第一列索引將被用于加速查找。
    • 創建單列索引的語法示例:CREATE INDEX index_name ON table_name (column_name);
  2. 多列索引

    • 多列索引是針對表中多個列組合而成的索引。
    • 它可以加速涉及這些列組合的查詢,例如聯合查詢或者多列條件查詢。
    • 當查詢涉及到多個列時,多列索引通常比單列索引更有效。
    • 多列索引的列順序非常重要,因為只有查詢中使用的列的左側前綴才會被索引所利用。
    • 創建多列索引的語法示例:CREATE INDEX index_name ON table_name (column1, column2, ...);

前綴索引

在 MySQL 中,你可以創建前綴索引來提高查詢效率。前綴索引是指只對列值的一部分進行索引,而不是整個列值。這在某些情況下可以減少索引的大小,并提高查詢性能,尤其是對于較大的列類型(如 TEXT 或 VARCHAR)。

要在 MySQL 中創建前綴索引,你可以使用以下語法:

CREATE INDEX index_name ON table_name (column_name(prefix_length));

在這里,prefix_length 是你希望索引的列值的前綴長度。以下是一個示例:

CREATE TABLE my_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
);CREATE INDEX idx_name_prefix ON my_table (name(10));

在這個示例中,我們為 name 列創建了一個前綴長度為 10 的索引。這意味著索引將僅包含 name 列值的前 10 個字符。你可以根據你的需求調整 prefix_length 的值。

請注意,使用前綴索引時需要注意選擇適當的前綴長度。如果前綴長度太短,可能會導致索引失效,而如果太長,可能會增加索引的大小并降低性能提升效果。因此,需要根據你的數據和查詢模式來選擇合適的前綴長度。

創建索引

  • 創建索引是指在某個表的一列或多列上建立一個索引,以便提高對表的訪問速度。
  • 創建索引三種方式,這三種方式分別是創建表時創建索引在已經存在的表上創建索引使用alter table語句來創建索引。

1.創建表時創建索引

創建表的時候可以直接創建索引,這種方式最簡單、方便。其基本形式如下:

mysql> create table 表名(-> 列名 數據類型 約束,-> 列名 數據類型 約束,--------------------> 列名 數據類型 約束,-> [unique/fulltext] index 索引名(列名 [asc/desc])-> );
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20),-> age int(3),-> phone int unique,-> unique index index_mytable_phone(phone),#創建唯一索引-> index index_mytable_name(name(3)),#創建前綴索引-> index index_mytable_age(age)#創建常規索引-> );
Query OK, 0 rows affected, 2 warnings (0.07 sec)mysql> show index from mytable;
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY             |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | phone               |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_phone |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_name  |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_age   |            1 | age         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20),-> age int(3),-> phone int unique,-> index index_mytable_name(name(3)),-> index index_mytable_age(age)-> );
Query OK, 0 rows affected, 1 warning (0.05 sec)mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | phone              |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_name |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_age  |            1 | age         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

注:MySQL8會為主鍵和唯一和外鍵自動創建索引

2.在已經存在的表上創建索引

前提是:該表上無索引,需要手動添加索引

mysql> create [unique/fulltext] index 索引名 on 表名(列名);  #創建單列索引
mysql> create [unique/fulltext] index 索引名 on 表名(列名1,列名2...);  #創建多列索引 
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20)-> );mysql> create unique index index_mytable_name on mytable(name(3));mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_name |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

3.使用alter table語句創建索引

mysql> alter table 表名 add [unique/fulltext] index 索引名(列名);
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20)-> );#通過添加索引的方式添加約束
mysql> alter table mytable add unique index index_mytable_name(name);   mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_name |            1 | name        | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

使用計劃查詢SQL使用索引情況(explain

mysql> desc stu;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int         | NO   | PRI | NULL    | auto_increment |
| name    | varchar(20) | NO   |     | NULL    |                |
| age     | int         | NO   |     | NULL    |                |
| classid | int         | NO   | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+mysql> show index from stu;
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| stu   |          0 | PRIMARY             |            1 | id          | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| stu   |          1 | stu_classid_foreign |            1 | classid     | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+mysql> select * from stu;
+-----+--------+-----+---------+
| id  | name   | age | classid |
+-----+--------+-----+---------+
| 101 | 小天   |  18 |    1001 |
| 102 | 小明   |  20 |    1003 |
| 103 | 小紅   |  13 |    1002 |
+-----+--------+-----+---------+mysql> explain select * from stu where id=101;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | stu   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+mysql> explain select * from stu where id=103;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | stu   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
explain分析結果的含義:id: 每一行的編號select_type: 查詢類型。這里是 SIMPLE,表示這是一個簡單的查詢。table:這是表的名字。partitions: 所使用的分區(如果有)type:連接操作的類型,ALLindex、range、 ref、eq_ref、const、system、NULL(從左到右,性能從差到好)possible_keys:可能可以利用的索引的名字Key:它顯示了MySQL實際使用的索引的名字。如果它為空(或NULL),則MySQL不使用索引。key_len:索引中被使用部分的長度,以字節計。ref:它顯示的是列的名字(或單詞“const”),MySQL將根據這些列來選擇行rows:MySQL所認為的它在找到正確的結果之前必須掃描的記錄數。顯然,這里最理想的數字就是1filtered: 表示按表的過濾條件過濾后的結果所占百分比。Extra:這里可能出現許多不同的選項,其中大多數將對查詢產生負面影響

查看索引

mysql> show index from 表名;

刪除索引

mysql> drop index 索引名 on 表名;

案例

按照下列需求,完成索引的創建

  1. name字段為姓名字段,該字段的值可能會重復,為該字段創建索引(創建一個常規索引
mysql> create index index_stu_name on stu(name);
  1. phone手機號字段的值是非空且唯一(primary),為該字段創建唯一索引(創建一個唯一索引
mysql> create unique index index_stu_phone on stu(phone);
  1. 為profession、age、status創建聯合索引(多個常規索引
mysql> create index index_stu_profession_age_status on stu(profession,age,status);
  1. 為email建立合適的索引來提升查詢效率(創建一個常規索引
mysql> create index index_stu_email on stu(email);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712903.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712903.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微店商品詳情 API 的調用頻率有限制嗎?

微店(Weidian)的商品詳情 API的調用頻率限制可能會因具體的 API 版本和商家的設置而有所不同。為了確保 API 的穩定性和公平使用,大多數 API 都會設置調用頻率限制,通常這些限制是以每秒查詢率(QPS)或每日請…

逆變器專題(16)-構網型逆變器與跟網型逆變器

相應仿真原件請移步資源下載 現如今,常規的逆變器控制方法主要分為跟網型以及構網型逆變器 跟網型逆變器即常規意義上的并網逆變器,即輸出電流直接接入大電網,通常為電流源型逆變器,其輸出電流的相位與頻率時隨著電網電壓而隨時進…

基于光流法以及背景減除法的降雪檢測項目知識點總結

項目總結目錄 一、算法部分1.光流法部分知識點2.python代碼與大華攝像頭之間的實時調用3.兩個方法的代碼 一、算法部分 1.光流法部分知識點 像素坐標系與直角坐標系之間的轉換,之后計算角度。 其中光流法通過判斷運動目標的角度來識別是否為降雪,通過…

我在使用 Copilot 時遇到了許可證驗證錯誤。

如果使用的是 Copilot,并收到以下錯誤消息,請按以下步驟進行操作: We encountered a problem validating your Copilot license. For more information, see https://aka.ms/copilotlicensecheck 請確保使用的是正確的帳戶 請確保已使用具…

神經網絡系列---卷積

文章目錄 卷積神經網絡卷積轉置卷積 卷積核和反卷積的三種實現方式卷積的次數計算 卷積神經網絡 在神經網絡的卷積層中,向下取整(Floor)是一種常用的策略,特別是在處理輸出尺寸不是整數的情況時。當你計算出卷積層輸出的尺寸&…

UnityAPI的學習——Mathf類

Mathf類是Unity中的數學類,屬于結構體類型,只有靜態屬性和靜態方法,即不可實例化。 Mathf類靜態屬性 在Mathf類中,涉及的靜態屬性有Deg2Rad、Rad2Deg和Infinity,其中屬性Deg2Rad和Rad2Deg功能相似。 1、Deg2Rad屬性…

UE5 C++ 發射子彈發射(Projectile)

一.相關藍圖的練習,在我之前的文章中射擊子彈案例-CSDN博客 本篇使用C實現 1.創建C類 MyBullet,在MyBullet.h中包含相關頭文件 #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Components/StaticMeshComponent.…

SpringBoot 注解全解析

注解的優勢: 采用純 java 代碼,不在需要配置繁雜的 xml 文件在配置中也可享受面向對象帶來的好處類型安全對重構可以提供良好的支持減少復雜配置文件的同時亦能享受到 springIoC 容器提供的功能 1. 常用的Spring Boot注釋及其用途和示例 1)S…

Java 中notify 和 notifyAll 方法介紹

1. notify 方法 notify() 方法是 Java 中 Object 類的一個方法,它用來喚醒在該對象的監視器(monitor)上等待的單個線程。如果有多個線程都在該對象上等待,則會隨機喚醒其中一個線程。被喚醒的線程將會嘗試重新獲取對象鎖&#xff…

idea集成git詳解教程(實用篇)

0.Git常用命令 Git常用命令-CSDN博客 1.下載git Git - Downloads 一路傻瓜式安裝即可(NEXT) 2.軟件測試 在Windows桌面空白處,點擊鼠標右鍵,彈出右鍵菜單 Git軟件安裝后,會在右鍵菜單中增加兩個菜單 Git GUI He…

matplotlib繪圖中文亂碼問題

如圖所示,在使用python包matplotlib繪圖時中文文字顯示亂碼,在繪圖前加入以下兩行代碼即可 # 導入包 import matplotlib.pyplot as plt # 解決中文亂碼問題 plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False重新運行代…

Linux 進程的前臺/后臺切換

目錄 前言 簡單例子 前言 當你用shell啟動一個程序時,往往他是在前臺工作的。程序會一直占用終端命令行,例如你在前臺解壓的時候必須等著,期間干不了別的事(除非另開一個終端)。 例如經常用連接到遠程服務器執行腳本…

【知識摘要】一文帶你了解什么是RedLock。

1、什么是RedLock 紅鎖(RedLock)是一種分布式鎖算法,由 Redis 的作者 Salvatore Sanfilippo(也稱為 Antirez)設計,用于在分布式系統中實現可靠的鎖機制。它的設計解決了單一 Redis 實例作為分布式鎖可能出…

【Django】執行查詢—跨關系查詢中的跨多值關聯問題

跨多值查詢 跨越 ManyToManyField 或反查 ForeignKey (例如從 Blog 到 Entry )時,對多個屬性進行過濾會產生這樣的問題:是否要求每個屬性都在同一個相關對象中重合。 filter() 先看filter(),通過一個例子看&#xf…

打造無縫滾動體驗:JavaScript中的scrollIntoView()方法實戰指南

在現代Web開發中,提升用戶體驗是至關重要的。通過JavaScript的scrollIntoView()方法,我們可以為用戶創造出流暢而令人愉悅的滾動體驗。本文將深入研究scrollIntoView()的強大功能,并結合實例演示如何在項目中巧妙應用,以打造出無縫…

緩存穿透解決方案之布隆過濾器

布隆過濾器可以快速判斷數據是否存在,避免從數據庫中查詢數據是否存在,減輕數據庫的壓力 布隆過濾器是由一個初值為0的bit數組和N個哈希函數,可以用來快速的判斷某個數據是否存在 當我們想要標記某個數據是否存在時,布隆過濾器會…

Java底層自學大綱_高可用篇

高可用專題_自學大綱所屬類別學習主題建議課時(h) A 容器化技術001 Docker架構設計原理2.5 A 容器化技術002 Docker部署springboot項目2.5 A 容器化技術003 基于Docker-Compose部署微服務項目2.5 B Nginx實現高可用004 Nginx反向代理&負載均衡&a…

LabVIEW眼結膜微血管采集管理系統

LabVIEW眼結膜微血管采集管理系統 開發一套基于LabVIEW的全自動眼結膜微血管采集管理系統,以提高眼結膜微血管臨床研究的效率。系統集成了自動化圖像采集、圖像質量優化和規范化數據管理等功能,有效縮短了圖像采集時間,提高了圖像質量&#…

idea 多模塊A模塊調用了B模塊的Jar包,而非本地源碼

1,問題描述 對于多模塊的互相調用,比如模塊A,模塊B,模塊C, 這在本地都是可以編輯進行開發的源碼, 按理說是模塊A可以直接點進模塊B的本地源碼, 但是不知道什么原因,導致模塊A點進…

C++小記 - 二叉樹

文章目錄 二叉樹一、二叉樹理論基礎篇二叉樹的種類滿二叉樹完全二叉樹二叉搜索樹平衡二叉搜索樹 二叉樹的存儲方式鏈式存儲:順序存儲:遍歷規則:構造實現: 二叉樹的遍歷方式二叉樹的定義 二、二叉樹的遞歸遍歷遞歸算法的三個要素:遞…