第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

SQL 索引

1. 定義

慕課解釋:索引(index)是一個單獨(dú)的數(shù)據(jù)庫物理結(jié)構(gòu),是包含數(shù)據(jù)表字段的列表,列表中注明字段每個值所在的存儲位置。通俗來說,索引類似于書的目錄,你可以通過目錄迅速查詢書的內(nèi)容,通過索引迅速查詢數(shù)據(jù)表的數(shù)據(jù)。

2. 前言

本小節(jié),我們將一起學(xué)習(xí) SQL 中的索引。

數(shù)據(jù)庫在進(jìn)行查詢的時候,需要對整張表進(jìn)行掃描,當(dāng)數(shù)據(jù)表的數(shù)據(jù)量大的時候,這樣掃描的效率是很低下的。為了提高數(shù)據(jù)檢索能力,增強(qiáng)數(shù)據(jù)庫查詢性能,數(shù)據(jù)庫引入了索引機(jī)制,且 SQL 標(biāo)準(zhǔn)中也加入了索引相關(guān)操作。

本小節(jié)測試數(shù)據(jù)如下,請先在數(shù)據(jù)庫中執(zhí)行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  id int PRIMARY KEY,
  username varchar(20),
  age int
);
INSERT INTO imooc_user(id,username,age)
VALUES (1,'peter',18),(2,'pedro',24),(3,'jerry',22),(4,'mike',18),(5,'tom',20);

3. 索引的創(chuàng)建與刪除

索引是一個單獨(dú)的數(shù)據(jù)庫物理結(jié)構(gòu),因此它也可以通過 Create 和 Drop 指令來創(chuàng)建和刪除。

語法如下:

CREATE INDEX [index_name] ON [table_name]([col]);
DROP INDEX [index_name] ON [table_name];

其中index_name表示索引名稱,table_name表示數(shù)據(jù)表名稱,col表示字段名稱。

3.1 例1 單字段普通索引

請書寫 SQL 語句,為 imooc_user 的age字段新建一個普通索引。

分析

按照語法,使用 Create 新建索引,并指定索引名稱即可。

語句

CREATE INDEX age_index ON imooc_user(age); 

3.2 例2 單字段唯一索引

索引可以分為普通索引唯一索引,唯一索引要求字段必須唯一、不可重復(fù)。

請書寫 SQL 語句,為 imooc_user 的username字段新建一個唯一索引。

分析:

同例1,但需要給索引添加唯一約束,即 Unique。

語句:

CREATE UNIQUE INDEX username_index ON imooc_user(username); 

3.3 例3 多字段索引

SQL 也支持我們?yōu)槎鄠€字段建立索引。

請書寫 SQL 語句,為 imooc_user 的usernameage字段新建一個普通索引。

分析:

同例1。

語句:

CREATE INDEX username_age_index ON imooc_user(username,age); 

3.4 例4 刪除索引

請書寫 SQL 語句,刪除掉 imooc_user 上的age_index索引。

分析:

按照刪除索引語法寫出語句即可。

語句:

DROP INDEX age_index;

在 MySQL 中,你還需要告訴數(shù)據(jù)庫索引所在的數(shù)據(jù)表,如下:

DROP INDEX age_index ON imooc_user;

4. 使用索引

索引的使用是智能的,數(shù)據(jù)庫會自動找到對應(yīng)的索引來加速你的查詢。

如,你已經(jīng)新建了 username_index 索引,當(dāng)你以 username 作為條件查找時,會自動使用到 username_index 索引。

如下:

SELECT * FROM imooc_user WHERE username = 'pedro'; 

4.1 例5 顯示使用索引

索引選擇雖然是智能的,但它有時也會犯錯,所以你可以顯示的指定使用某個索引。

請書寫 SQL 語句,顯示的使用索引去搜索 imooc_user 表中的用戶pedro。

分析:

通過 Force Index 語法顯示使用索引即可。

語句:

SELECT * FROM imooc_user FORCE INDEX(username_index) WHERE username = 'pedro'; 

注意: MySQL 支持 Force Index,其它數(shù)據(jù)庫不支持,且強(qiáng)制式使用某個索引的方式并不好,而選錯索引的概率很低。如果出現(xiàn)了索引選錯的情況,請優(yōu)先檢查 SQL 語句,嘗試優(yōu)化一下可讀性。

5. 小結(jié)

  • 索引是大數(shù)據(jù)查詢的利器,能顯著提升搜索的效率,是一種典型的空間換時間思想運(yùn)用。
  • 不要吝嗇你的磁盤容量,如果某個查詢相應(yīng)時間很慢,請馬上思考一下,能否使用索引解決。
  • 索引遵循最左原則,即優(yōu)先匹配左邊的元素,聯(lián)合索引也不例外。