mysql中innodb引擎的索引分兩類,一類是一級索引(主鍵的同義詞),一類是二級索引(非主鍵的索引)。兩類索引都使用b+tree形式組織,但一級索引的葉子節點包含所以對應的整行資訊,所有的查詢最終都是通過一級索引完成,二級索引只包含二級索引對應的一級索引。所以直接使用一級索引比用二級索引快,因為少了一系列二級索引到一級索引的磁碟i/o。同時,使用主鍵查詢時,這種資料組織方式也比資料和索引分開要快一次磁碟i/o操作。(myisam使用資料和索引分離的組織方式)
一級索引只有乙個,畢竟主鍵最多只有乙個,但二級索引可以有多個,因為一張表可以建立多個非主鍵索引。但每次查詢只會選擇乙個索引。
mysql會按照以下規則建立一級索引:
如果定義了主鍵,那麼mysql會選擇主鍵作為一級索引;
如果沒有定義主鍵,那麼mysql會選擇第乙個定義了非空的唯一索引(unique and not null)作為主鍵,並且作為一級索引;
如果沒有定義主鍵也沒有定義非空的唯一索引,那麼mysql會隱式的生成一級索引,索引的列是mysql為每一行資料生成的行號。行號是乙個6位元組的數,按照插入順序單調遞增。
MySql中啟用InnoDB資料引擎
1.mysql支援的資料引擎列表如下 2.其中預設的是myisam資料引擎,可惜此引擎不支援事務處理,我們需要將預設的資料引擎改為innodb。3.innodb和berkeleydb支援事務處理,可惜預設的情況下都是被disable的。所有的引擎裡面,innodb效能最強大,算是商業級的。4.啟動i...
Mysql中InnoDB引擎的鎖
鎖這種機制的作用 對共享資源併發訪問的管理,保證資料的完整性和一致性。在資料庫中,lock與latch都可以被稱為 鎖 但是兩者的含義是完全不同的。lock針對的物件是事務,它用來鎖定資料庫中的物件,如表 頁 行。一般lock的物件僅在事務commit或者rollback後進行釋放,並且lock是有...
MySQL儲存引擎 InnoDB
為什麼innodb不將總數存起來?innodb直接count 會遍歷全表 沒有where條件 雖然結果準確,但會導致效能問題。按照效率排序的話,count 字段 innodb一棵b 樹可以存放多少行資料?這個問題的簡單回答是 約2千萬。為什麼是這麼多呢?因為這是可以算出來的,要搞清楚這個問題,我們先...