索引,在我們的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到底是怎麼儲存的。
關係型資料庫 非關係型資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...
關係型資料庫 非關係型資料庫
2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...
mysql索引與鎖的關係 關係型資料庫 索引與鎖
設計乙個關係型資料庫 png 索引模組 為什麼要使用索引 查詢時間複雜度從o n 提公升到o logn png 存在以下弊端,並且會多次io,影響速度。png 採用b tree b tree 多路搜尋樹,並不是二叉的 是一種常見的資料結構。使用b tree結構可以顯著減少定位記錄時所經歷的中間過程,...