頭歌實訓之索引

?

🌟?各位看官好,我是maomi_9526

🌍?種一棵樹最好是十年前,其次是現在!

🚀?今天來學習C語言的相關知識。

👍?如果覺得這篇文章有幫助,歡迎您一鍵三連,分享給更多人哦

目錄

第1關:創建一般索引

第2關:刪除索引-練習

第3關:創建聯合索引

第4關:創建唯一索引

第5關:創建前綴索引


第1關:創建一般索引

任務描述
本關任務:為 student 表按姓名升序建立索引,索引名為 idx_sname。

相關知識
為了完成本關任務,你需要掌握:

  1. 索引是什么;
  2. 索引的分類;
  3. 索引的創建和刪除;
  4. 查詢索引。

索引是什么
數據庫索引是一種提高數據庫系統性能的方法。索引能讓數據庫服務器更快地查找和獲取表中指定的行。

例如,為了方便讀者快速查找書中的術語,很多書籍在最后附加了索引頁,術語按字母排序,同時給出頁碼。這樣讀者可以根據術語名,快速獲取頁碼,而不用翻閱整本書。

但是索引也給數據庫系統帶來了一定的開銷,所以我們應該謹慎地使用它們。

索引的分類
索引大體可分為單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引四類。本實訓我們主要介紹單例索引和組合索引:

  • 單例索引:一個索引只包含單個列,但一個表中可以有多個單列索引;
  • 普通索引:僅加速查詢 最基本的索引,沒有任何限制,是我們大多數情況下使用到的索引;
  • 唯一索引:索引列中的值必須是唯一的,但允許為空值;
  • 主鍵索引:是一種特殊的唯一索引,不允許有空值。
  • 組合索引:在表的多個字段上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引才會被使用,使用組合索引時遵循最左前綴集合。

索引的創建和刪除
創建索引
創建索引有兩種方式,一種是在建表時創建,另一種是建表后創建:

普通索引:
創表時創建普通索引:

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;/****請在此編寫代碼,操作完畢之后點擊評測******//**********Begin**********/create index idx_sname on student(sname);/**********End**********/show index from student;

第2關:刪除索引-練習

任務描述
本關任務:刪除索引。

相關知識
刪除索引
同樣,刪除索引也有兩種方式。

#使用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;/****請在此編寫代碼,操作完畢之后點擊評測******//**********Begin**********/
drop index idx_sname on student;/**********End**********/show index from student;

第3關:創建聯合索引

任務描述
本關任務:創建聯合索引 idx_sname_sdept。

相關知識
為了完成本關任務,你需要掌握:如何創建聯合索引。

創建聯合索引

語法:
create index 索引名稱 on 表名(字段名稱)

示例:
create index idx_name_age on student( name,age);

聯合索引的使用規則

  • 最左前綴原則: 聯合索引的查詢效率依賴于索引列的順序。查詢時,必須從聯合索引的最左邊的列開始匹配,否則索引可能不會被使用。例如,對于索引idx_name_age:
    • 查詢條件WHERE name = 'Alice' AND age = 20會使用索引。
    • 查詢條件WHERE age = 20 AND name = 'Alice'也會使用索引(因為MySQL會自動優化)。
    • 查詢條件WHERE age = 20不會使用索引,因為沒有從最左邊的列name開始。
  • 部分列的使用: 如果查詢條件只使用了聯合索引的一部分列(從最左邊開始),索引仍然可以被部分使用。例如:
    • 查詢條件WHERE name = 'Alice'會使用索引,但只會利用name這一部分。
  • 排序和范圍查詢:聯合索引在排序和范圍查詢中也非常有效。例如:

SELECT * FROM students WHERE name = 'Alice' ORDER BY age;

編程要求
根據任務完成代碼編寫,將代碼補充在右側編輯器中: (1)在 student 表 sname 字段和 sdept 字段上創建聯合索引 idx_sname_sdept; (2)編寫一個只利用聯合索引進行查詢的例子(使用EXPLAIN 分析)。
測試說明
編寫代碼后,點擊測評即可。


開始你的任務吧,祝你成功!

 use TeachingDb;/****請在此編寫代碼,操作完畢之后點擊評測******//**********Begin**********//**********創建索引idx_sname_sdept**********/ 
create index idx_sname_sdept on student(sname,sdept);/**********應用舉例**********/ 
EXPLAIN select sname,sdept from student where sname='馬小燕' and sdept='計算機';/**********End**********/

第4關:創建唯一索引

任務描述
本關任務:創建唯一索引 uk_cname。

相關知識
為了完成本關任務,你需要掌握:如何創建唯一索引。

如何創建唯一索引

語法:

create unique index 索引名稱 on 表名(字段名稱);

示例:

create unique index secondIndex on student(name, address);

注意:

  • 索引名稱、表名、字段名稱 都不要用引號括起來;
  • 對于聯合索引而言,字段名稱可以有多個,中間用英文逗號分隔即可;
  • 唯一索引數據不可重復。

編程要求
在 course 表的 cname 字段上創建唯一索引 uk_cname ,并將代碼補充在右側編輯器中。

測試說明
編寫代碼后,點擊測評即可。


開始你的任務吧,祝你成功!

 use TeachingDb;/****請在此編寫代碼,操作完畢之后點擊評測******//**********Begin**********/create unique index uk_cname on course (cname);/**********End**********/show index from course;

第5關:創建前綴索引

任務描述
本關任務:創建前綴索引。

相關知識
前綴索引是基于列的前綴值創建的索引。例如,對于一個VARCHAR(255)類型的列,你可以選擇只對前n個字符建立索引。這樣,索引的大小會顯著減小,但仍然可以在一定程度上提高查詢性能。

創建前綴索引
創建前綴索引的兩種方式

//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));

確定length的取值算法
確定length的SQL語句:

SELECT COUNT(DISTINCT LEFT(column_name,length))/COUNT(column_name)?
FROM table_name;

length的取值從1逐步增加,當查詢返回的值為1或不再發生變化時,length的值就是前綴索引的合理取值。

編程要求
在 course 表的 cname 字段上創建前綴索引 pidx_cname,并將代碼補充在右側編輯器中:
(1)測試cname前綴索引length的合理取值;
(2)創建前綴索引 pidx_cname。

測試說明
編寫代碼后,點擊測評即可。


開始你的任務吧,祝你成功!

 use TeachingDb;/****請在此編寫代碼,操作完畢之后點擊評測******//**********Begin**********//**********測試cname字段前綴索引的合理取值**********/ 
select COUNT(DISTINCT LEFT(cname,4))/COUNT(cname) from course;/**********創建前綴索引pidx_cname**********/ create index pidx_cname on course(cname(4));/**********End**********/
show index from course;

任務描述
本關任務:創建全文索引 ft_cname 。

相關知識
全文索引(Full-Text Index) 是一種用于高效檢索文本內容中關鍵詞或短語的數據庫索引技術。它與傳統的 B-Tree 索引不同,能夠支持自然語言搜索(如模糊匹配、分詞、相關性排序等),適用于對長文本內容進行復雜查詢的場景。

全文索引(Full-Text Index)是一種專門用于快速搜索文本內容的索引類型,通常在需要對大量文本數據進行全文搜索的場景中使用。在 MySQL 中,全文索引主要用于 TEXT 字段,但 VARCHAR 在特定場景下也可支持。

創建全文索引
創建全文索引的兩種方式

//1.CRATE INDEX添加
CREATE FULLTEXT INDEX index_name ON table_name (column1,column2,...);

//2.ALTER添加
ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column1,column2,...);

使用全文索引
使用全文索引的方式

SELECT * FROM 表名 WHERE MATCH(字段) AGAINST('查詢文本') ;

編程要求
若在 student 表的remarks字段上以文本的形式存儲學生的備注信息,在remarks字段上創建全文索引 ft_remarks,并檢索是“學生干部”的學生信息,將代碼補充在右側編輯器中。

測試說明
編寫代碼后,點擊測評即可。


開始你的任務吧,祝你成功!

 use TeachingDb;/****請在此編寫代碼,操作完畢之后點擊評測******//**********Begin**********/
/**********(1)創建全文索引ft_remarks**********/ 
create fulltext index  ft_remarks on student (remarks);
/**********(2)顯示student表上的索引**********/ 
show index from student;
/**********(3)檢索“學生干部”的學生姓名和備注信息**********/ 
select sname,remarks from student where match(remarks)against('學生干部');/**********End**********/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78311.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rundeck 介紹及安裝:自動化調度與執行工具

Rundeck介紹 概述:Rundeck 是什么? Rundeck 是一款開源的自動化調度和任務執行工具,專為運維場景設計,幫助工程師通過統一的平臺管理和執行跨系統、跨節點的任務。它由 PagerDuty 維護(2016 年收購)&#…

基于 Python 的自然語言處理系列(85):PPO 原理與實踐

📌 本文介紹如何在 RLHF(Reinforcement Learning with Human Feedback)中使用 PPO(Proximal Policy Optimization)算法對語言模型進行強化學習微調。 🔗 官方文檔:trl PPOTrainer 一、引言&…

珍愛網:從降本增效到綠色低碳,數字化新基建價值凸顯

2024年12月24日,法大大聯合企業綠色發展研究院發布《2024簽約減碳與低碳辦公白皮書》,深入剖析電子簽在推動企業綠色低碳轉型中的關鍵作用,為企業實現環境、社會和治理(ESG)目標提供新思路。近期,法大大將陸…

Java實現HTML轉PDF(deepSeekAi->html->pdf)

Java實現HTML轉PDF,主要為了解決將ai返回的html文本數據轉為PDF文件方便用戶下載查看。 一、deepSeek-AI提問詞 基于以上個人數據。總結個人身體信息,分析個人身體指標信息。再按一個月為維度,詳細列舉一個月內訓練計劃,維度詳細至每周每天…

Estimands與Intercurrent Events:臨床試驗與統計學核心框架

1. Estimands(估計目標)概述 1.1 定義與作用 1.1.1 定義 Estimand是臨床試驗中需明確提出的科學問題,即研究者希望通過數據估計的“目標量”,定義“治療效應”具體含義,確保分析結果與臨床問題一致。 例如,在研究某種新藥對高血壓患者降壓效果時,Estimand可定義為“在…

Jsp技術入門指南【十】IDEA 開發環境下實現 MySQL 數據在 JSP 頁面的可視化展示,實現前后端交互

Jsp技術入門指南【十】IDEA 開發環境下實現 MySQL 數據在 JSP 頁面的可視化展示,實現前后端交互 前言一、JDBC 核心接口和類:數據庫連接的“工具箱”1. 常用的 2 個“關鍵類”2. 必須掌握的 5 個“核心接口” 二、創建 JDBC 程序的步驟1. 第一步&#xf…

深入理解HotSpot JVM 基本原理

關于JAVA Java編程語言是一種通用的、并發的、面向對象的語言。它的語法類似于C和C++,但它省略了許多使C和C++復雜、混亂和不安全的特性。 Java 是幾乎所有類型的網絡應用程序的基礎,也是開發和提供嵌入式和移動應用程序、游戲、基于 Web 的內容和企業軟件的全球標準。. 從…

【HTTP/3:互聯網通信的量子飛躍】

HTTP/3:互聯網通信的量子飛躍 如果說HTTP/1.1是鄉村公路,HTTP/2是現代高速公路系統,那么HTTP/3就像是一種革命性的"傳送門"技術,它徹底重寫了數據傳輸的底層規則,讓信息幾乎可以瞬間抵達目的地,…

Apipost免費版、企業版和私有化部署詳解

Apipost是企業級的 API 研發協作一體化平臺,為企業提供 API研發測試管理全鏈路解決方案,不止于API研發場景,增強企業API資產管理。 Apipost 基于同一份數據源,同時提供給后端開發、前端開發、測試人員使用的接口調試、Mock、自動化…

使用若依二次開發商城系統-1:搭建若依運行環境

前言 若依框架有很多版本,這里使用的是springboot3vue3這樣的一個前后端分離的版本。 一.操作步驟 1 下載springboot3版本的后端代碼 后端springboot3的代碼路徑,https://gitee.com/y_project/RuoYi-Vue 需要注意我們要的是springboot3分支。 先用g…

速成GO訪問sql,個人筆記

更多個人筆記:(僅供參考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 本文是基于原生的庫 database/sql進行初步學習 基于ORM等更多操作可以關注我…

【C++指南】告別C字符串陷阱:如何實現封裝string?

🌟 各位看官好,我是egoist2023! 🌍 種一棵樹最好是十年前,其次是現在! 💬 注意:本章節只詳講string中常用接口及實現,有其他需求查閱文檔介紹。 🚀 今天通過了…

系統架構師2025年論文《論軟件架構評估2》

論軟件系統架構評估 v2.0 摘要: 某市醫院預約掛號系統建設推廣應用項目是我市衛生健康委員會 2019 年發起的一項醫療衛生行業便民惠民信息化項目,目的是實現轄區內患者在轄區各公立醫療機構就診時,可以通過多種線上渠道進行預約掛號,提升就醫體驗。我作為系統架構師參與此…

BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection

背景 對于現有的BEVDet方法,它對于速度的預測誤差要高于基于點云的方法,對于像速度這種與時間有關的屬性,僅靠單幀數據很難預測好。因此本文提出了BEVDet4D,旨在獲取時間維度上的豐富信息。它是在BEVDet的基礎上進行拓展,保留了之前幀的BEV特征,并將其進行空間對齊后與當…

el-upload 上傳邏輯和ui解耦,上傳七牛

解耦的作用在于如果后面要我改成從阿里云oss上傳文件,我只需要實現上傳邏輯從七牛改成阿里云即可,其他不用動。實現方式有2部分組成,一部分是上傳邏輯,一部分是ui。 上傳邏輯 大概邏輯就是先去服務端拿上傳token和地址&#xff0…

酒水類目電商代運營公司-品融電商:全域策略驅動品牌長效增長

酒水類目電商代運營公司-品融電商:全域策略驅動品牌長效增長 在競爭日益激烈的酒水市場中,品牌如何快速突圍并實現長效增長?品融電商憑借「效品合一 全域增長」方法論與全鏈路運營能力,成為酒水類目代運營的領跑者。從品牌定位、視…

機器學習特征工程中的數值分箱技術:原理、方法與實例解析

標題:機器學習特征工程中的數值分箱技術:原理、方法與實例解析 摘要: 分箱技術作為機器學習特征工程中的關鍵環節,通過將數值數據劃分為離散區間,能夠有效提升模型對非線性關系的捕捉能力,同時增強模型對異…

【MySQL專欄】MySQL數據庫的復合查詢語句

文章目錄 1、首先練習MySQL基本語句的練習①查詢工資高于500或崗位為MANAGER的雇員,同時還要滿足他們的姓名首字母為大寫的J②按照部門號升序而雇員的工資降序排序③使用年薪進行降序排序④顯示工資最高的員工的名字和工作崗位⑤顯示工資高于平均工資的員工信息⑥顯…

Python爬蟲(5)靜態頁面抓取實戰:requests庫請求頭配置與反反爬策略詳解

目錄 一、背景與需求?二、靜態頁面抓取的核心流程?三、requests庫基礎與請求頭配置?3.1 安裝與基本請求3.2 請求頭核心參數解析?3.3 自定義請求頭實戰 四、實戰案例:抓取豆瓣讀書Top250?1. 目標?2. 代碼實現3. 技術要點? 五、高階技巧與反反爬策略?5.1 動態…

HTML給圖片居中

在不同的布局場景下&#xff0c;讓 <img> 元素居中的方法有所不同。下面為你介紹幾種常見的居中方式 1. 塊級元素下的水平居中 如果 <img> 元素是塊級元素&#xff08;可以通過 display: block 設置&#xff09;&#xff0c;可以使用 margin: 0 auto 來實現水平居…