mysql索引的用途:mysql
保持數據的完整性;算法
優化數據的訪問性能sql
改進表的連接(join)操做數據結構
對結果進行排序性能
簡化聚合數據操做優化
索引的數據結構:B-、B+、R-、散列spa
散列實現對直接查找方式能提供最優的性能,但對必定範圍的查找卻效率底下。設計
B-樹索引實現是一個專門爲範圍查詢設計的。3d
B-樹:指針
B-樹結構支持插入、控制操做以及經過管理一系列樹根狀結構的彼此聯通的節點中來作選擇。B-樹結構中有兩種節點類型:索引節點和葉子節點。葉子節點是存儲數據的,而索引節點是用來告訴用戶存儲在葉子節點中的數據的順序,並幫助用戶找到數據。B-樹不是二叉樹,二叉樹只是一種簡單的節點層次結構的實現。有關B-樹的數據結構概念、數學證實以及技術描述的信息參見:http://en.wikipedia.org/wiki/Btree.
B+樹
B+樹是B-樹結構的加強版,儘管B+樹支持B-樹的全部特性,他們之間最顯著的不一樣點在於B+樹中底層數據是按照說起的索引列進行排序的。B+樹還經過在葉子節點之間附加引用來優化掃描的性能。http://en.wikipedia.org/wiki/B%2B_tree
散列
散列表數據結構是一個簡單的概念,他將一種算法應用到給定值中以在底層數據存儲系統中返回一個惟一的指針或位置。散列表的優勢是始終以線性時間複雜度找到須要讀取的行的位置,而不想B-樹那樣須要跨越多層節點來肯定位置。
http://en.wikipedia.org/wiki/Hash_table
通訊R-樹
R-樹數據結構支持基於數據類型對集合數據進行管理。目前只有MyIsam使用R-樹支持空間索引。使用空間索引也有不少限制,好比只支持惟一的NOT NULL 列等。空間索引並不經常使用。http://en.wikipedia.org/wiki/R-tree。