索引是MySQL數據庫中的一個非常重要的概念。索引是用來快速定位數據庫中記錄的一種數據結構,能夠提高查詢效率。在MySQL中,索引主要有B-tree、哈希表和全文索引三種類型,其中B-tree索引是最常用的。
CREATE TABLE mytable (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT UNSIGNED NOT NULL,
INDEX idx_age (age)
);
在上面的例子中,我們創建了一個名為mytable的數據表,其中包含id、name和age三個字段。id字段被定義為主鍵,自動遞增,并且不允許為空。而age字段則使用了一個名叫idx_age的B-tree索引。
B-tree索引是一種可以支持范圍查詢的數據結構。它將所有索引的值按照一定的規則放在一個B-tree里面。每個節點都包含了索引的值以及指向下一個節點的指針,同時還有一個指向實際數據存儲位置的指針。
通過B-tree索引,我們可以快速地對age字段進行查詢、排序和分組。當我們需要查詢某個范圍內的記錄時,B-tree索引能夠快速地將有關記錄的指針返回給我們。
EXPLAIN SELECT * FROM mytable WHERE age BETWEEN 20 AND 30;
為了確定我們的B-tree索引是否發揮了作用,我們可以使用MySQL的EXPLAIN語句來查看查詢的執行計劃。在上面的例子中,我們查詢了mytable表中age字段值在20到30之間的所有記錄。
使用EXPLAIN語句得到的執行計劃如下所示:
+----+-------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| 1 | SIMPLE | mytable | NULL | range | idx_age | idx_age | 4 | NULL | 1 | 100.00 | Using where |
+----+-------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
在執行計劃中,我們可以看到MySQL已經選擇了我們的B-tree索引idx_age來執行查詢,并且類型為range,表示是一個范圍查詢。
總之,索引是數據庫中非常重要的一環,能夠顯著提高查詢效率。MySQL中的索引類型有B-tree、哈希表和全文索引。其中B-tree索引是最常用的,能夠支持范圍查詢。