在MySQL中,輔助索引就是指除了主鍵索引以外的其他索引,因為MySQL的索引實現是基于B-Tree數據結構的,所以在B-Tree中每個節點中存儲的都是多條記錄,因此要想找到某一條記錄,就需要遍歷整個B-Tree,這樣的效率比較低。因此,為了提高MySQL查詢的效率,我們需要為常用的查詢操作創建輔助索引,以便快速定位到符合條件的記錄,從而提高查詢效率。
輔助索引又可以分為二級索引和聚簇索引,其中聚簇索引是在索引樹中直接存儲數據的,也就是說查詢到數據后,可以直接返回數據頁,這種索引的效率最高。而二級索引則是在索引樹中存儲的是主鍵的值,查詢到數據后還需要根據索引值去二次查找,并返回對應的數據頁。
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`phone` varchar(11) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `phone` (`phone`),
KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上是一個創建用戶表的SQL,其中id為主鍵,phone列有唯一約束,email列有普通索引。當我們使用phone列或email列作為查詢條件時,MySQL就會使用相應的輔助索引來定位符合條件的記錄。但是如果查詢的時候涉及到其他列,如下所示:
SELECT * FROM user WHERE username = '張三';
因為沒有為username列建立輔助索引,MySQL只能通過遍歷整個B-Tree來查找符合條件的記錄,這時查詢的效率就會比較低。因此,為了提高查詢效率,在經常使用的查詢字段上建立輔助索引是非常有必要的。