MySQL 禁止使用 HASH 索引

del88發表於2024-08-21

在MySQL中,雖然InnoDB儲存引擎預設使用的是BTREE索引,但它也支援一種特殊的自適應雜湊索引(adaptive hash index, AHI),這是InnoDB自動管理和使用的,使用者無法直接控制。然而,對於記憶體儲存引擎MEMORY(之前稱為HEAP),MySQL確實允許使用者顯式地建立HASH索引。

如果你想要在MEMORY表上使用HASH索引,你可以在建立表的時候指定索引型別為HASH,或者使用ALTER TABLE命令來為現有表新增HASH索引。以下是一個示例:

CREATE TABLE example (
    id INT,
    name VARCHAR(100),
    INDEX (id) USING HASH
) ENGINE=MEMORY;

或者,如果表已經存在:

ALTER TABLE example ADD INDEX (id) USING HASH;

需要注意的是,HASH索引只適用於等值查詢,並且不支援範圍查詢或排序操作。此外,由於HASH索引的特性,它們可能不如BTREE索引那樣穩定,特別是在處理雜湊衝突時。

對於InnoDB儲存引擎,你無法直接建立HASH索引,但InnoDB會自動為其認為適合的索引建立自適應雜湊索引,以提高查詢效能。這個過程是自動的,使用者無法直接干預。如果你想要最佳化InnoDB表的查詢效能,你可以考慮最佳化查詢語句、增加適當的BTREE索引或調整InnoDB的效能引數。

相關文章