**Mysql索引概念:**
說說Mysql索引,看到一個很少比如:索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄(索引)并不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要占紙張的,而索引是要占磁盤空間的。
**Mysql索引主要有兩種結構:B+tree和hash.**
hash:hsah索引在mysql比較少用,他以把數據的索引以hash形式組織起來,因此當查找某一條記錄的時候,速度非常快.當時因為是hash結構,每個鍵只對應一個值,而且是散列的方式分布.所以他并不支持范圍查找和排序等功能.
B+樹:b+tree是mysql使用最頻繁的一個索引數據結構,數據結構以平衡樹的形式來組織,因為是樹型結構,所以更適合用來處理排序,范圍查找等功能.相對hash索引,B+樹在查找單條記錄的速度雖然比不上hash索引,但是因為更適合排序等操作,所以他更受用戶的歡迎.畢竟不可能只對數據庫進行單條記錄的操作.
**Mysql常見索引:**主鍵索引、唯一索引、普通索引、全文索引、組合索引
PRIMARY KEY(主鍵索引) ALTER TABLE \`table_name\` ADD PRIMARY KEY ( \`column\` )
UNIQUE(唯一索引) ALTER TABLE \`table_name\` ADD UNIQUE (\`column\`)
INDEX(普通索引) ALTER TABLE \`table\_name\` ADD INDEX index\_name ( \`column\` )
FULLTEXT(全文索引) ALTER TABLE \`table_name\` ADD FULLTEXT ( \`column\` )
組合索引 ALTER TABLE \`table\_name\` ADD INDEX index\_name ( \`column1\`, \`column2\`, \`column3\` )
**Mysql各種索引區別:**
普通索引:最基本的索引,沒有任何限制
唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引:它 是一種特殊的唯一索引,不允許有空值。
全文索引:僅可用于 MyISAM 表,針對較大的數據,生成全文索引很耗時好空間。
組合索引:為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則。
**B+Tree**

1. 所有關鍵字都在葉子結點出現
2. 所有葉子結點增加一個鏈指針
## 聚集索引和輔助索引、覆蓋索引
- 聚集索引(主鍵索引)
—innodb存儲引擎是索引組織表,即表中的數據按照主鍵順序存放。而聚集索引就是按照每張表的主鍵構造一顆B+樹,同時葉子節點中存放的即為整張表的記錄數據
—聚集索引的葉子節點稱為數據頁,數據頁,數據頁!重要的事說三遍。聚集索引的這個特性決定了索引組織表中的數據也是索引的一部分。
- 輔助索引(二級索引)
—非主鍵索引
—葉子節點=鍵值+書簽。Innodb存儲引擎的書簽就是相應行數據的主鍵索引值
- 覆蓋索引
如果查詢的列恰好是索引的一部分,那么查詢只需要在索引文件上進行,不需要進行到磁盤中找數據,若果查詢得列不是索引的一部分則要到磁盤中找數據
使用explain,可以通過輸出的extra列來判斷,對于一個索引覆蓋查詢,顯示為**using index**,MySQL查詢優化器在執行查詢前會決定是否有索引覆蓋查詢
- PC
- IO模型
- Inode介紹
- Linux
- Linux基本操作命令
- Linux網絡相關命令
- Crontab計劃任務
- Shell
- Sed命令
- Awk命令
- LAMP/LNMP
- PHP
- 基本語法
- 面向對象
- 錯誤和異常處理
- 命名空間
- PHP7
- 正則表達式
- Hashtable
- 變量的內部實現
- PHP-FPM
- PHP運行原理
- swoole
- mysql
- SQL標準
- mysql三范式
- 存儲引擎
- Mysql事務
- Mysql索引
- Mysql優化
- Explain
- MySQL索引原理及慢查詢優化
- MongoDb
- 計算機網絡
- IP協議
- TCP(傳輸控制協議)
- UDP(用戶數據報協議)
- HTTP 協議
- HTTPS
- HTTP的基本優化
- Websocket協議
- 版本控制器
- Git
- Svn
- 數據結構
- 數組
- 鏈表
- 算法