關係型資料庫之索引
索引,在我們的mysql中的也叫key,是儲存引擎中用於快速找到記錄的一種資料結構。這是索引的基本功能,當然,索引還有一些別的屬性。但是《高效能mysql》這本書上並沒有講清楚一個事情,那就是索引和主鍵的區別。主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。我來來具體的東西說吧,書大家都看過吧,看下它每頁是不是有個頁碼,我們的資料表主鍵就相當於是這個頁碼。索引相當於書的目錄,有了目錄我們可以很快的知道這本書的基本內容和結構,資料索引也一樣,它可以加快資料表的查詢速度。
索引對於良好的效能特別關鍵,尤其是當表中的資料量越來越大的時候,索引對於效能的影響愈發重要。在資料量小並且負載比較低的時候,不恰當的索引對效能的影響可能還不是太明顯,但是當資料量增大的時候,效能會急劇地下降。
在mysql中,我們看看究竟是如何使用索引的,先看看一條sql語句:
select firsr_name from student where student_id = 5
如果我們在student_id列上有建索引,則mysql將使用該索引找到student_id為5的列,也就是說,mysql先在索引上按值進行查詢,然後返回所有包含該值的資料行。
索引中可以包含一個或者多個的列,如果索引包含多個列,那麼列的順序也是非常重要的。因為mysql只能高效地使用索引的最左字首列,建立一個包含兩個列的索引,和建立兩個只包含一列的索引是大不相同的。
ORM中的索引
我們知道,現在多種語言都封裝了ORM,節省了很多我們資料庫查詢的成本。ORM工具能夠產生符合邏輯的,合法的查詢,但是它很難生成適合索引的查詢。待補充
索引的型別
索引有很重型別,可以為不同的場景提供更好的效能。我們先來看看mysql支援的索引型別,以及他們的優缺點。索引歸根結底,是一個查詢的問題。
先來看看B-tree索引,人們談論索引的時候,如果沒有特別指明的型別,我們一般指的是B-tree索引,它使用B-tree這種資料結構來儲存資料。關於B-tree的概念,我會在資料結構與演算法的章節中著重去回顧和理解。這裡只是簡要的說一說B-tree在我們的資料庫中應該如何去使用。B-tree索引能夠加快訪問資料的速度,因為儲存引擎不再需要進行全表的掃描來獲取需要的資料。取而代之的是從索引的根結點進行搜尋。根節點的槽中存放了指向子節點的指標,儲存引擎根據這些指標向下查詢。通過比較節點頁的值和要查詢的值可以找到合適的指標進入下層子節點,這些指標實際上定義了子節點中值的上限和上限。最終儲存引擎要麼是找到對應的值,要麼記錄不存在。葉子節點比較特別,它們的指標指向的是被索引的資料,而不是其他的節點頁。
好,讓我們來建立一個table,看看B-tree到底是怎麼儲存的。
相關文章
- 聊聊非關係型資料庫MongoDB索引資料庫MongoDB索引
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫與非關係型資料庫介紹!資料庫
- 關係型資料庫資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- nodejs之MongoDB 非關係型資料庫NodeJSMongoDB資料庫
- 反DDD模式之關係型資料庫模式資料庫
- 關係型資料庫和非關係型資料庫的區別資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- redis—非關係型資料庫Redis資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- Node MySQL打造關係型資料庫MySql資料庫
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 資料庫基礎知識詳解五:MySQL中的索引和其兩種引擎、主從複製以及關係型/非關係型資料庫資料庫MySql索引
- 平時常見關係型資料庫資料庫
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫
- 關係型和非關係型資料庫一定要對立?達夢資料提供新思路資料庫
- 雲關係型資料庫(Relational Database Service,RDS)資料庫Database
- 關係型資料庫分庫分表系列之一資料庫
- Java資料型別與資料庫欄位型別對應關係Java資料型別資料庫
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- 批量鎖(適用各種關係型資料庫)資料庫
- SQL Server 2016關係型資料庫概覽AZSQLServer資料庫
- MySQL資料庫之索引MySql資料庫索引
- 資料庫之建立索引資料庫索引
- 看看關係型資料庫是怎麼吊打Hadoop的資料庫Hadoop
- 關係型資料庫全表掃描分片詳解資料庫
- 分散式關係型資料庫RadonDB體驗歸來分散式資料庫
- 關係型資料庫設計三大正規化資料庫
- 如何將資料從Hadoop匯出到關係型和NoSQL資料庫?HadoopSQL資料庫
- 資料庫多對多表關係資料資料庫
- 關係型資料庫 RDBMS 的舊與新 — 談談 NewSQL資料庫SQL
- 應用開發實踐之關係型資料庫(以MySql為例)小結資料庫MySql