sql唯一索引異常 MySQL系列 一 引擎和索引

2021-10-12 09:22:45 字數 1264 閱讀 8028

常見的有三種,innodbmyisammemory

innodb有以下的特性:

innodb讀寫效率相對較差,資料儲存占用空間大。

myisam特性有

myisam占用空間小,處理速度快。

myisam自己維護了計數器,因此對於 select count(*) 查詢速度更快。

memory的資料全部放在記憶體中,速率最快,關機和重啟均會丟失資料。

以常見的innodb為例:

後三者稱為「二級索引」,它記錄的是主鍵,而不是資料儲存的位置。

1、插入緩衝(insert buffer)

每次的插入操作會放入緩衝池中,然後按照一定的頻率進行合併操作,再進行io操作。

主要用於提公升io效能。但只對聚集索引(唯一索引)無效。

2、二次寫(double write)

**見上圖水印

如上圖所示,innodb將資料從快取寫入磁碟時,分成以下幾步:

將page(資料頁)彙總到快取中

寫入硬碟上的共享表空間。這裡效能好

寫入硬碟的目標位置

如果第三步失敗或發生異常,則會從共享表空間中恢復,再次寫入

3、自適應雜湊索引(ahi)

如果發現某二級索引被頻繁訪問時,會將該索引放入hash快取中。hash查詢非常快,因此可以提高索引的效率。

4、預讀(read ahead)

有兩種預讀演算法:

隨機預讀:同乙個資料塊的不同page被讀取時,會把該資料塊的剩餘page一併讀入快取。不過該方式已經在5.5中被廢棄,因為比較複雜和不穩定。

大致有三種方式:statementrowmixedlevel

statement:記錄每一條會修改資料的sql。

優點:不需要記錄每一行的具體變化,日誌量少,效能高。

row:不記錄sql語句的上下文資訊,只記錄哪條記錄被修改。

優點:記錄內容簡單,準確性高。因為記錄的是最終被修改的值;

缺點:記錄的量非常大。比如表結構被修改後,每一行的資料都會被記錄。

mixedlevel:上述兩種的混合模式。避開了各自的缺點,不同的操作使用不同的方式記錄。

mysql 唯一索引 mysql建立唯一索引

檢視索引 show index from 資料庫表名 alter table 資料庫add index 索引名稱 資料庫欄位名稱 primary key 主鍵索引 alter table table name add primary key column unique 唯一索引 alter tabl...

MySQL唯一索引

mysql唯一索引 返回首頁 1 唯一索引 unique 單列唯一索引和聯合唯一索引。索引是為了加速查詢。唯一索引是加了約束條件。例如主外來鍵。2 唯一索引的約束 約束不能重複 可以為空 主鍵不能重複 不能為空 3 唯一索引的寫法 create table t1 id int num int,uni...

mysql索引二(唯一索引)

前文中介紹了mysql中普通索引用法,和沒有索引的區別。mysql索引一 普通索引 下面學習一下唯一索引。建立唯一索引的目的不是為了提高訪問速度,而只是為了避免資料出現重複。唯一索引可以有多個但索引列的值必須唯一,索引列的值允許有空值。如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立...