Mysql的歷史
簡單回顧一下Mysql的歷史,Mysql 是一個關係型資料庫管理系統,由瑞典 Mysql AB 公司開發,目前屬於 Oracle 公司。關係型資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
Mysql的優勢
- Mysql 是開源的,所以你不需要支付額外的費用。
- Mysql 支援大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫。
- Mysql 使用標準的 SQL 資料語言形式。
- Mysql 可以執行於多個系統上,並且支援多種語言。
- Mysql 是可以定製的,採用了 GPL 協議,你可以修改原始碼來開發自己的 Mysql 系統。
索引的儲存分類
索引是在MYSQL的儲存引擎層中實現的,而不是在服務層實現的。所以每種儲存引擎的索引都不一定完全相同,也不是所有的儲存引擎都支援所有的索引型別。MYSQL目前提供了一下4種索引。
Normal 普通索引
基本的索引型別,大多數情況下都可以使用。
Unique 唯一索引
表示唯一的,不允許重複的索引,如果該欄位資訊保證不會重複,例如身份證號用作索引時,可設定為unique。Unique和Primary Key為列或列集合提供了唯一性的保證,Primary Key是擁有自動定義的Unique約束,但是每個表中可以有多個Unique約束,但是隻能有一個Primary Key約束。
Full Text 全文索引
全文索引可以在varchar、char、text型別的列上建立。MyISAM支援全文索引,InnoDB在mysql5.6之後支援了全文索引。FULLTEXT 用於搜尋很長一篇文章的時候,效果最好。用在比較短的文字,如果就一兩行字的,普通的 INDEX 也可以。
SPATIAL 空間索引
空間索引是對空間資料型別的欄位建立的索引,MYSQL中的空間資料型別有4種,分別是GEOMETRY(幾何)、POINT(點)、LINESTRING(線)、POLYGON(多邊形)。MYSQL使用SPATIAL關鍵字進行擴充套件,使得能夠用於建立正規索引型別的語法建立空間索引。建立空間索引的列,必須將其宣告為NOT NULL,空間索引只能在儲存引擎為MYISAM的表中建立。
我對索引的一些看法
- MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質:索引是資料結構。
- 資料庫查詢是資料庫的最主要功能之一。我們都希望查詢資料的速度能儘可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化。
- 最基本的查詢演算法當然是順序查詢(linear search),這種複雜度為O(n)的演算法在資料量很大時顯然是糟糕的,好在電腦科學的發展提供了很多更優秀的查詢演算法,例如二分查詢(binary search)、二叉樹查詢(binary tree search)等。
- 如果稍微分析一下會發現,每種查詢演算法都只能應用於特定的資料結構之上,例如二分查詢要求被檢索資料有序,而二叉樹查詢只能應用於二叉查詢樹上,但是資料本身的組織結構不可能完全滿足各種資料結構(例如,理論上不可能同時將兩列都按順序進行組織),所以,在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。
- 當你發現自己的查詢速度慢的時候,最快解決問題的方法就是使用索引。索引的使用是影響查詢速度的重要因素。在使用索引之前其他的優化查詢的動作純粹是浪費時間,只有合理地使用索引之後,才有必要考慮其他優化方式。
索引相關的概念先到這裡,後續會針對索引的實際應用和大家一起繼續交流。