Day14:關于MySQL的索引——創、查、刪

?前言:先創建一個練習的數據庫和數據

1.創建數據庫并創建數據表的基本結構

-- 創建練習數據庫
CREATE DATABASE index_practice;
USE index_practice;-- 創建基礎表(包含CREATE TABLE時創建索引)
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,          -- 主鍵索引(自動創建)product_code VARCHAR(20) UNIQUE,            -- 唯一索引product_name VARCHAR(50) NOT NULL,price DECIMAL(10,2),description TEXT,INDEX name_index (product_name(10))        -- 前綴索引
) ENGINE=InnoDB;

?2.導入實例數據?


-- 插入最少量的測試數據
INSERT INTO products (product_code, product_name, price, description) VALUES
('P1001', '無線鼠標', 99.00, '2.4G無線連接'),
('P1002', '機械鍵盤', 299.00, 'RGB背光鍵盤'),
('P1003', '藍牙耳機', 199.00, '主動降噪功能'),
('P1004', '智能手表', 599.00, '心率監測功能');

索引的優點

  • 可以提高查詢速度。
  • 可以確保數據的唯一性。
  • 提高ORDER BY和GROUP BY的執行速度。

索引設計規則

  • 為頻繁查詢的字段創建索引。
  • 數據量較小的表最好不要創建索引。
  • 盡量在不同值較多的字段上創建索引。
  • 一個表中的索引不是越多越好,需要限制索引的數量。
  • 對于頻繁進行插入、刪除、修改操作的表,創建的索引越多,則更新表所耗費的時間就越長。

一、索引的分類?

1.普通索引

最基本的索引類型,它沒有唯一性的限制,可以有重復值和空值。創建普通索引的關鍵字是INDEX。

2.唯一索引

這種索引與普通索引基本相同,區別在于唯一索引的索引字段的值必須是唯一的,不允許重復,但允許有空值。創建唯一索引的關鍵字是UNIQUE。

3.主鍵索引

主鍵索引是一種特殊的唯一索引,不同之處在于每張表只能有一個主鍵索引,且不允許有空值。創建主鍵索引的關鍵字是PRIMARY KEY,即主鍵。一般在創建表時指定主鍵,也可以通過修改表的方式添加主鍵。

4.全文索引

全文索引只能在CHAR、VARCHAR或者TEXT類型的字段上創建,并且只能在存儲引擎為MyISAM和InnoDB的表中創建。創建全文索引的關鍵字是FULLTEXT。當查詢數據量較大的字符串類型的字段時,使用全文索引可以提高查詢速度。?

注意:

創建在一個字段上的索引稱為單索引

創建在多個字段上的索引稱為組合索引、復合索引或多列索引

如果唯一索引是組合索引,則多個字段的組合必須是唯一的。

二、創建索引?

CREATE  [ UNIQUE | FULLTEXT ]  INDEX 索引名
ON 表名 (字段名稱1 [ (長度1) ]  [ ASC ? DESC ] 
[, 字段名稱2 [ (長度2) ]  [ ASC ? DESC ]?] );

說明:

  • 索引名:指定創建的索引名稱,在一個表中可以創建多個索引,但是每個索引名必須是唯一的。
  • UNIQUE | FULLTEXT:可選項,UNIQUE表示創建的是唯一索引;FULLTEXT表示創建的是全文索引。
  • 長度:表示使用字段前多少個字符創建索引,這樣可以減少索引文件的大小。只能對字符串類型的字段指定長度。
  • ASC |?DESC:指定索引按照升序ASC或者降序DESC排序。默認值為ASC。?

?1.使用CREATE INDEX語句創建索引

CREATE TABLE demo_table (id INT PRIMARY KEY,                     -- 主鍵索引col1 VARCHAR(20) UNIQUE,                -- 唯一索引col2 VARCHAR(30),INDEX idx_col2 (col2)                   -- 普通索引
);mysql> DESC demo_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| col1  | varchar(20) | YES  | UNI | NULL    |       |
| col2  | varchar(30) | YES  | MUL | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

2.使用ALTER TABLE語句添加索引?

CREATE INDEX idx_name ON products(product_name);mysql> CREATE INDEX idx_name ON products(product_name);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC products;
+--------------+---------------+------+-----+---------+----------------+
| Field        | Type          | Null | Key | Default | Extra          |
+--------------+---------------+------+-----+---------+----------------+
| id           | int           | NO   | PRI | NULL    | auto_increment |
| product_code | varchar(20)   | YES  | UNI | NULL    |                |
| product_name | varchar(50)   | NO   | MUL | NULL    |                |
| price        | decimal(10,2) | YES  |     | NULL    |                |
| description  | text          | YES  |     | NULL    |                |
+--------------+---------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

3.使用CREATE TABLE語句創建索引

ALTER TABLE products ADD INDEX idx_price (price);mysql> ALTER TABLE products ADD INDEX idx_price (price);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> DESC products;
+--------------+---------------+------+-----+---------+----------------+
| Field        | Type          | Null | Key | Default | Extra          |
+--------------+---------------+------+-----+---------+----------------+
| id           | int           | NO   | PRI | NULL    | auto_increment |
| product_code | varchar(20)   | YES  | UNI | NULL    |                |
| product_name | varchar(50)   | NO   | MUL | NULL    |                |
| price        | decimal(10,2) | YES  | MUL | NULL    |                |
| description  | text          | YES  |     | NULL    |                |
+--------------+---------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

    三、查看索引

    SHOW { INDEX | INDEXES | KEYS }{ FROM | IN } 表名 [{ FROM | IN } 數據庫名];
    
    • SHOW INDEX語句以二維表的形式顯示指定表中的所有索引信息
    • 由于顯示的信息較多不易查看,使用\G參數可以將每一行垂直顯示,查看效果更好。?
    SHOW INDEX FROM products;mysql> SHOW INDEX FROM products;
    +----------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
    | Table    | Non_unique | Key_name     | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
    +----------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
    | products |          0 | PRIMARY      |            1 | id           | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
    | products |          0 | product_code |            1 | product_code | A         |           4 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
    | products |          1 | name_index   |            1 | product_name | A         |           4 |       10 |   NULL |      | BTREE      |         |               | YES     | NULL       |
    | products |          1 | idx_name     |            1 | product_name | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
    | products |          1 | idx_price    |            1 | price        | A         |           4 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
    +----------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
    5 rows in set (0.03 sec)

    四、刪除索引

    1.使用DROP INDEX語句刪除索引

    DROP INDEX 索引名 ON 表名;
    
    DROP INDEX idx_name ON products;

    2.使用ALTER TABLE語句刪除索引?

    ALTER TABLE 表名
    DROP INDEX 索引名
    DROP PRIMARY KEY ;
    
    ALTER TABLE products
    DROP INDEX idx_price;

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

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

    相關文章

    【C++】繼承:萬字總結

    📝前言: 這篇文章我們來講講面向對象三大特性之一——繼承 🎬個人簡介:努力學習ing 📋個人專欄:C學習筆記 🎀CSDN主頁 愚潤求學 🌄其他專欄:C語言入門基礎,py…

    Java 架構設計:從單體架構到微服務的轉型之路

    Java 架構設計:從單體架構到微服務的轉型之路 在現代軟件開發中,架構設計的選擇對系統的可擴展性、可維護性和性能有著深遠的影響。隨著業務需求的日益復雜和用戶規模的不斷增長,傳統的單體架構逐漸暴露出其局限性,而微服務架構作…

    Django3 - 開啟Django Hello World

    一、開啟Django Hello World 要學習Django首先需要了解Django的操作指令,了解了每個指令的作用,才能在MyDjango項目里編寫Hello World網頁,然后通過該網頁我們可以簡單了解Django的開發過程。 1.1 Django的操作指令 無論是創建項目還是創建項…

    2025阿里云AI 應用-AI Agent 開發新范式-MCP最佳實踐-78頁.pptx

    2025阿里云AI 應用-AI Agent 開發新范式-MCP最佳實踐,包含以下內容: 1、AI 應用架構新范式 2、云原生API網關介紹 3、云原生API網關底座核心優勢 4、流量網關最佳實踐 5、AI 網關代理 LLM 最佳實踐 6、MCP網關最佳實踐 7、MSE Nacos MCP Server 注冊中心…

    Pytorch深度學習框架60天進階學習計劃 - 第41天:生成對抗網絡進階(一)

    Pytorch深度學習框架60天進階學習計劃 - 第41天:生成對抗網絡進階(一) 今天我們將深入探討生成對抗網絡(GAN)的進階內容,特別是Wasserstein GAN(WGAN)的梯度懲罰機制,以及條件生成與無監督生成…

    大模型到底是怎么產生的?一文了解大模型誕生全過程

    前言 大模型到底是怎么產生的呢? 本文將從最基礎的概念開始,逐步深入,用通俗易懂的語言為大家揭開大模型的神秘面紗。 大家好,我是大 F,深耕AI算法十余年,互聯網大廠核心技術崗。 知行合一,不寫水文,喜歡可關注,分享AI算法干貨、技術心得。 【專欄介紹】: 歡迎關注《…

    五子棋(測試報告)

    文章目錄 一、項目介紹二、測試用例三、自動化測試用例的部分展示注冊登錄游戲大廳游戲匹配 總結 一、項目介紹 本項目是一款基于Spring、SpringMVC、MyBatis、WebSocket的雙人實時對戰五子棋游戲,游戲操作便捷,功能清晰明了。 二、測試用例 三、自動化測試用例的…

    idea開發工具多賬號使用拉取代碼報錯問題

    設置git不使用憑證管理 把 use credential helper 取消勾選 然后重新pull代碼,并勾選remember 這樣就可以使用多賬號來連接管理代碼了

    【OpenCV】【XTerminal】talk程序運用和linux進程之間通信程序編寫,opencv圖像庫編程聯系

    目錄 一、talk程序的運用&Linux進程間通信程序的編寫 1.1使用talk程序和其他用戶交流 1.2用c語言寫一個linux進程之間通信(聊天)的簡單程序 1.服務器端程序socket_server.c編寫 2.客戶端程序socket_client.c編寫 3.程序編譯與使用 二、編寫一個…

    【軟考系統架構設計師】信息系統基礎知識點

    1、 信息的特點:客觀性(真偽性)、動態性、層次性、傳遞性、滯后性、擴壓性、分享性 2、 信息化:是指從工業社會到信息社會的演進與變革 3、 信息系統是由計算機硬件、網絡和通信設備、計算機軟件、信息資源、信息用戶和規章制度…

    一種基于學習的多尺度方法及其在非彈性碰撞問題中的應用

    A learning-based multiscale method and its application to inelastic impact problems 摘要: 我們在工程應用中觀察和利用的材料宏觀特性,源于電子、原子、缺陷、域等多尺度物理機制間復雜的相互作用。多尺度建模旨在通過利用固有的層次化結構來理解…

    基于PyQt5的Jupyter Notebook轉Python工具

    一、項目背景與核心價值 在數據科學領域,Jupyter Notebook因其交互特性廣受歡迎,但在生產環境中通常需要將其轉換為標準Python文件。本文介紹一款基于PyQt5開發的桌面級轉換工具,具有以下核心價值: 可視化操作:提供友好的GUI界面,告別命令行操作 批量處理:支持目錄遞歸…

    圖論之并查集——含例題

    目錄 介紹 秩是什么 例子——快速入門 例題 使用路徑壓縮,不使用秩合并 使用路徑壓縮和秩合并 無向圖和有向圖 介紹 并查集是一種用于 處理不相交集合的合并與查詢問題的數據結構。它主要涉及以下基本概念和操作: 基本概念: 集合&…

    【數學建模】(智能優化算法)天牛須算法(Beetle Antennae Search, BAS)詳解與Python實現

    天牛須算法(Beetle Antennae Search, BAS)詳解與Python實現 文章目錄 天牛須算法(Beetle Antennae Search, BAS)詳解與Python實現1. 引言2. 算法原理2.1 基本思想2.2 數學模型 3. Python實現4.實測效果測試1. Michalewicz函數的最小化測試2. Goldstein-Price函數的約束最小化 5…

    【家政平臺開發(42)】筑牢家政平臺安全防線:安全測試與漏洞修復指南

    本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

    學習筆記八——內存管理相關

    📘 目錄 內存結構基礎:棧、堆、數據段Rust 的內存管理機制(對比 C/C、Java)Drop:Rust 的自動清理機制Deref:為什么 *x 能訪問結構體內部值Rc:多個變量“共享一個資源”怎么辦?Weak&…

    ReliefF 的原理

    🌟 ReliefF 是什么? ReliefF 是一種“基于鄰居差異”的特征選擇方法,用來評估每個特征對分類任務的貢獻大小。 它的核心問題是: “我怎么知道某個特征是不是重要?是不是有能力把不同類別的數據區分開?” 而…

    ?asm匯編源代碼之-漢字點陣字庫顯示程序源代碼下載?

    漢字點陣字庫顯示程序 源代碼下載 文本模式下顯示16x16點陣漢字庫內容的程序(標準16x16字庫需要使用CHGHZK轉換過后才能使用本程序正常顯示) 本程序需要調用file.asm和string.asm中的子程序,所以連接時需要把它們連接進來,如下 C:\> tlink showhzk file string 調用參…

    【已更新完畢】2025泰迪杯數據挖掘競賽B題數學建模思路代碼文章教學:基于穿戴裝備的身體活動監測

    基于穿戴裝備的身體活動監測 摘要 本研究基于加速度計采集的活動數據,旨在分析和統計100名志愿者在不同身體活動類別下的時長分布。通過對加速度數據的處理,活動被劃分為睡眠、靜態活動、低強度、中等強度和高強度五類,進而計算每個志愿者在…

    Ubuntu24.04裝機安裝指南

    文章目錄 Ubuntu24.04裝機安裝指南一、分區說明二、基礎軟件三、使用fcitx5配置中文輸入法四、安裝搜狗輸入法【**不推薦**】1. 安裝fcitx2. 安裝輸入法 五、禁用/home目錄下自動生成文件夾六、更新軟件源1. 針對**新配置方式**的清華源替換方法2. 針對**老配置方式**的清華源替…