1. 程式人生 > 其它 >MySQL:MySQL 索引

MySQL:MySQL 索引

1 什麼是索引

  在資料庫表中,對欄位建立索引可以大大提高查詢速度。通過善用這些索引,可以令MySQL的查詢和 執行更加高效。

  如果合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那麼沒有設計和使用索引的MySQL就是 一個人力三輪車。拿漢語字典的目錄頁(索引)打比方,我們可以按拼音、筆畫、偏旁部首等排序的目 錄(索引)快速查詢到需要的字。

2 常見索引分類

索引名稱 說明
主鍵索引 (primary key) 主鍵是一種唯一性索引,每個表只能有一個主鍵, 用於標識資料表中的每一 條記錄
唯一索引 (unique) 唯一索引指的是 索引列的所有值都只能出現一次, 必須唯一
普通索引 (index) 最常見的索引,作用就是 加快對資料的訪問速度

MySql將一個表的索引都儲存在同一個索引檔案中, 如果對中資料進行增刪改操作,MySql都會自動的更 新索引.

3主鍵索引 (PRIMARY KEY)

  特點: 主鍵是一種唯一性索引,每個表只能有一個主鍵,用於標識資料表中的某一條記錄。

    一個表可以沒有主鍵,但最多隻能有一個主鍵,並且主鍵值不能包含NULL。

程式碼示例:

1) 建立db4資料庫

CREATE DATABASE db4 CHARACTER SET utf8;

2) 建立 demo01表

CREATE TABLE demo01(
    did 
INT, dname VARCHAR(20), hobby VARCHAR(30) );

3) 語法格式

  • 建立表的時候直接新增主鍵索引 (最常用)
CREATE TABLE 表名(
    -- 新增主鍵 (主鍵是唯一性索引,不能為null,不能重複)
    欄位名 型別 PRIMARY KEY,
);
  • 修改表結構 新增主鍵索引
ALTER TABLE 表名 ADD PRIMARY KEY ( 列名 )

4) 為demo1 表新增主鍵索引

ALTER TABLE demo01 ADD PRIMARY KEY (did);

4 唯一索引(UNIQUE)

  特點: 索引列的所有值都只能出現一次, 必須唯一.

  唯一索引可以保證資料記錄的唯一性。事實上,在許多場合,人們建立唯一索引的目的往往不是為了提高訪問速度,而只是為了避免資料出現重複

  

1) 語法格式

  建立表的時候直接新增主鍵索引

CREATE TABLE 表名(
    列名 型別(長度),
    -- 新增唯一索引
    UNIQUE [索引名稱] (列名)
);

  使用create語句建立: 在已有的表上建立索引

create unique index 索引名 on 表名(列名(長度))

  修改表結構新增索引

ALTER TABLE 表名 ADD UNIQUE ( 列名 )

2) 為 hobby欄位新增唯一索引

create unique index ind_hobby on demo01(hobby)

3) 向表中插入資料

INSERT INTO demo01 VALUES(1,'張三','DBJ');

# 報錯Duplicate entry 'DBJ' for key 'hobby'
# 唯一索引保證了資料的唯一性,索引的效率也提升了
INSERT INTO demo01 VALUES(2,'李四','DBJ');

3 普通索引 (INDEX)

  普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件(WHERE column=)或排序條件(ORDERBY column)中的資料列建立索引。

1) 語法格式

使用create index 語句建立: 在已有的表上建立索引

create index 索引名 on 表名(列名[長度])

修改表結構新增索引

ALTER TABLE 表名 ADD INDEX 索引名 (列名)

2) 給 dname欄位新增索引

# 給dname欄位新增索引
alter table demo01 add index dname_indx(dname)

4 刪除索引

  由於索引會佔用一定的磁碟空間,因此,為了避免影響資料庫的效能,應該及時刪除不再使用的索引

1) 語法格式 

ALTER TABLE table_name DROP INDEX index_name;

2) 刪除 demo01 表中名為 dname_indx 的普通索引

ALTER TABLE demo01 DROP INDEX dname_indx;

5 索引效能測試

<1>  選中 db4資料庫 右鍵 匯入SQL指令碼

<2> 找到軟體資料夾下的 測試索引.sql檔案, 點選執行

<3> 查詢 test_index 表中的總記錄數

SELECT COUNT(*) FROM test_index;

表中有 500萬條資料

<4>測試

在沒有新增索引的情況下, 使用 dname 欄位進行查詢

#未新增索引,進行分組查詢
SELECT * FROM test_index GROUP BY dname;

耗時

  執行:33.774 sec

為 dname欄位 新增索引

#新增索引
ALTER TABLE test_index ADD INDEX dname_indx(dname);

注意: 一般我們都是在建立表的時候 就確定需要新增索引的欄位

執行分組查詢

SELECT * FROM test_index GROUP BY dname;

耗時

  執行:0.001 sec

6 索引的優缺點總結

  • 新增索引首先應考慮在 where 及 order by 涉及的列上建立索引。
  • 索引的優點
    •   大大提高查詢速度
    • 顯著減少查詢中分組和排序的時間
  • 索引的缺點
    •   建立索引和維護索引需要時間,而且資料量越大時間越長
    • 當對錶中的資料進行增加,修改,刪除的時候,索引也要同時進行維護,降低了資料的維護 速度