第1關:創建一般索引
任務描述
本關任務:為 student 表按姓名升序建立索引,索引名為 idx_sname。
相關知識
為了完成本關任務,你需要掌握:
索引是什么;
索引的分類;
索引的創建和刪除;
查詢索引。
索引是什么
數據庫索引是一種提高數據庫系統性能的方法。索引能讓數據庫服務器更快地查找和獲取表中指定的行。
例如,為了方便讀者快速查找書中的術語,很多書籍在最后附加了索引頁,術語按字母排序,同時給出頁碼。這樣讀者可以根據術語名,快速獲取頁碼,而不用翻閱整本書。
但是索引也給數據庫系統帶來了一定的開銷,所以我們應該謹慎地使用它們。
索引的分類
索引大體可分為單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引四類。本實訓我們主要介紹單例索引和組合索引:
單例索引:一個索引只包含單個列,但一個表中可以有多個單列索引;
普通索引:僅加速查詢 最基本的索引,沒有任何限制,是我們大多數情況下使用到的索引;
唯一索引:索引列中的值必須是唯一的,但允許為空值;
主鍵索引:是一種特殊的唯一索引,不允許有空值。
組合索引:在表的多個字段上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引才會被使用,使用組合索引時遵循最左前綴集合。
索引的創建和刪除
創建索引
創建索引有兩種方式,一種是在建表時創建,另一種是建表后創建:
普通索引:
創表時創建普通索引:
CREATE table mytable(
?id INT NOT NULL,
?username VARCHAR(16) NOT NULL,
?INDEX [indexName] (username)
);
建表后創建普通索引:
create INDEX 索引名稱 on 表名(字段名 desc/asc);
#或者
ALTER TABLE 表名 ADD INDEX 索引名稱 (字段名);
asc 代表升序索引,desc 代表降序,mysql 默認升序索引。
唯一索引:
CREATE UNIQUE INDEX 索引名稱 ON 表名(字段名);
#或者
ALTER TABLE 表名 ADD UNIQUE (字段名);
主鍵索引:主鍵索引一般在建表時創建,會設為 int 而且是 AUTO_INCREMENT 自增類型的,例如一般表的 id 字段。
CREATE TABLE mytable (
? id int(11) NOT NULL AUTO_INCREMENT,
? PRIMARY KEY (id)
);
組合索引:組合索引就是在多個字段上創建一個索引。(應用場景:當表的行數遠遠大于索引鍵的數目時,使用這種方式可以明顯加快表的查詢速度)
CREATE INDEX 索引名稱 ON 表名(字段1,字段2,字段3);
#或者
ALTER TABLE 表名 ADD INDEX 索引名稱(字段1,字段2,字段3);
查詢表中索引
查詢索引 SQL:
show index from 表名;
編程要求
在右側編輯器補充代碼,要求如下:
為 student 表按姓名升序建立索引,索引名為 idx_sname。
測試說明
平臺會對你編寫的代碼進行測試,將你所創建的索引都現實出來,具體現實效果請查看右側測試集。
開始你的任務吧,祝你成功!
use teachingdb;
create index idx_sname on student(sname);
第2關:刪除索引-練習
任務描述
本關任務:刪除索引 idx_sname。
相關知識
刪除索引
同樣,刪除索引也有兩種方式。
#使用drop刪除索引
drop index index_name on table_name ;
#使用alter刪除索引
alter table table_name drop index index_name ;
alter table table_name drop primary key ; #刪除主鍵索引
編程要求
根據提示,在右側編輯器補充代碼,刪除索引 idx_sname。
測試說明
編寫代碼后,點擊測評即可。
use teachingdb;drop index idx_sname on student;
第3關:創建聯合索引
任務描述
本關任務:創建聯合索引 idx_sname_sdept。
相關知識
為了完成本關任務,你需要掌握:如何創建聯合索引。
創建聯合索引
語法:
create index 索引名稱 on 表名(字段名稱)
示例:
create index firstIndex on student(id, name, address);
注意:
1.索引名稱、表名、字段名稱 都不要用引號括起來;
?2.對于聯合索引而言,字段名稱可以有多個,中間用英文逗號分隔即可;
?3..普通索引數據可以重復。
編程要求
在 student 表 sname 字段和 sdept 字段上創建聯合索引 idx_sname_sdept,并將代碼補充在右側編輯器中。
測試說明
編寫代碼后,點擊測評即可。
開始你的任務吧,祝你成功!
use TeachingDb;
create index idx_sname_sdept on student(sname, sdept);
第4關:創建唯一索引
任務描述
本關任務:創建唯一索引 uk_cname。
相關知識
為了完成本關任務,你需要掌握:如何創建唯一索引。
如何創建唯一索引
語法:
create unique index 索引名稱 on 表名(字段名稱);
示例:
create unique index secondIndex on student(id, name, address);
注意:
索引名稱、表名、字段名稱 都不要用引號括起來;
對于聯合索引而言,字段名稱可以有多個,中間用英文逗號分隔即可;
唯一索引數據不可重復。
編程要求
在 course 表的 cname 字段上創建唯一索引 uk_cname ,并將代碼補充在右側編輯器中。
測試說明
編寫代碼后,點擊測評即可。
開始你的任務吧,祝你成功!
use TeachingDb;
create unique index uk_cname on course(cname)
第5關:創建前綴索引
任務描述
本關任務:創建4個字符的前綴索引 pf_cname。
相關知識
為了完成本關任務,你需要掌握:如何創建前綴索引。
創建前綴索引
創建前綴索引的兩種方式
//1.使用CREATE INDEX語句
CREATE INDEX index_name ON table_name (column_name (length));
//2.使用ALTER TABLE語句
ALTER TABLE table_name ADD INDEX (column_name (length));
編程要求
在 course 表的 cname 字段上創建4個字符的前綴索引 pf_cname,并將代碼補充在右側編輯器中。
測試說明
編寫代碼后,點擊測評即可。
開始你的任務吧,祝你成功!
use TeachingDb;
create index pf_cname on course(cname(4));
第6關:創建全文索引
任務描述
本關任務:創建全文索引 ft_cname 。
相關知識
為了完成本關任務,你需要掌握:如何創建全文索引。
創建全文索引
創建全文索引的兩種方式
//1.ALTER添加
ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column1,column2,...);
//2.CRATE INDEX添加
CREATE FULLTEXT INDEX index_name ON table_name (column1,column2,...);
編程要求
在 course 表的 cname 字段上創建全文索引 ft_cname ,并將代碼補充在右側編輯器中。
測試說明
編寫代碼后,點擊測評即可。
開始你的任務吧,祝你成功!
use TeachingDb;create fulltext index ft_cname on course(cname)