mysql的索引有哪些?

1. 主鍵索引(PRIMARY KEY)

主鍵索引通常在創建表時定義,確保字段唯一且非空:

-- 建表時直接定義主鍵
CREATE TABLE users (id INT NOT NULL,name VARCHAR(50),PRIMARY KEY (id)  -- 單字段主鍵
);-- 復合主鍵(多字段組合唯一)
CREATE TABLE order_details (order_id INT NOT NULL,product_id INT NOT NULL,quantity INT,PRIMARY KEY (order_id, product_id)  -- 多字段組合主鍵
);

2. 唯一索引(UNIQUE)

確保字段值唯一(允許 NULL,但 NULL 只能出現一次):

-- 建表時創建唯一索引
CREATE TABLE users (id INT PRIMARY KEY,phone VARCHAR(11) NOT NULL,email VARCHAR(32) NOT NULL,UNIQUE INDEX idx_email (email)  -- 為 email 字段創建唯一索引
);-- 表已存在時添加唯一索引
CREATE UNIQUE INDEX idx_phone ON users(phone);  -- 為 phone 字段創建唯一索引

3. 普通索引(INDEX)

最基礎的索引,無唯一性約束,僅用于加速查詢:

-- 建表時創建普通索引
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(200),content TEXT,create_time DATETIME,INDEX idx_create_time (create_time)  -- 為創建時間創建普通索引
);-- 表已存在時添加普通索引
CREATE INDEX idx_title ON articles(title);  -- 為標題創建普通索引

4. 復合索引(多列索引)

基于多個字段組合創建,遵循 “最左前綴匹配原則”:

-- 為 user_id 和 status 組合創建復合索引
CREATE TABLE orders (id INT PRIMARY KEY,user_id INT,status TINYINT,create_time DATETIME,INDEX idx_user_status (user_id, status)  -- 復合索引
);-- 表已存在時添加復合索引
CREATE INDEX idx_name_age ON users(name, age);  -- 為 name 和 age 組合創建索引

復合索引的 “最左前綴匹配原則” 是指:當使用復合索引(多字段組合索引)時,數據庫會優先匹配索引中最左側的字段,只有當左側字段被有效使用時,索引才會被部分或完全啟用。

具體規則如下:

  1. 從左到右匹配
    復合索引?(a, b, c)?會優先匹配字段?a,再匹配?a+b,最后匹配?a+b+c
    例如,對于索引?(name, age, gender)

    • 能觸發索引的查詢條件:
      WHERE name = ?
      WHERE name = ? AND age = ?
      WHERE name = ? AND age = ? AND gender = ?
    • 無法觸發索引的查詢條件:
      WHERE age = ?(跳過了最左的?name
      WHERE age = ? AND gender = ?(缺少最左的?name
  2. 中間字段不連續時,僅匹配到連續的左側字段
    對于索引?(a, b, c),如果查詢條件是?WHERE a = ? AND c = ?,則只有?a?字段會使用索引,c?字段無法利用索引(因為跳過了?b)。

  3. 范圍查詢會中斷后續匹配
    如果最左字段使用范圍查詢(>,?<,?BETWEEN?等),則后續字段無法利用索引。
    例如,對于索引?(name, age)

    • WHERE name = ? AND age > ?name?全匹配,age?范圍查詢,索引有效。
    • WHERE name > ? AND age = ?name?是范圍查詢,age?無法利用索引。

示例
假設有復合索引?(user_id, order_time),以下查詢的索引使用情況:

  • SELECT * FROM orders WHERE user_id = 100?→ 索引完全生效
  • SELECT * FROM orders WHERE user_id = 100 AND order_time > '2023-01-01'?→ 索引生效(user_id?全匹配,order_time?范圍匹配)
  • SELECT * FROM orders WHERE order_time > '2023-01-01'?→ 索引失效(跳過最左的?user_id

總結:創建復合索引時,應將查詢頻率最高、區分度最高的字段放在左側,且查詢條件需從左到右使用索引字段,才能最大限度利用復合索引的性能優勢。

5. 全文索引(FULLTEXT)

用于大文本字段的全文檢索(僅支持 CHAR、VARCHAR、TEXT 類型):

-- 建表時創建全文索引
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(200),content TEXT,FULLTEXT INDEX idx_content (content)  -- 為 content 字段創建全文索引
);-- 表已存在時添加全文索引
CREATE FULLTEXT INDEX idx_title_content ON articles(title, content);  -- 多字段組合全文索引使用方式:查詢時需用 MATCH() AGAINST() 語法:SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('數據庫 索引' IN BOOLEAN MODE);

6. 空間索引(SPATIAL)

針對空間數據類型(如 POINT、GEOMETRY 等)的索引:

-- 建表時創建空間索引(字段必須為 NOT NULL)
CREATE TABLE locations (id INT PRIMARY KEY,position POINT NOT NULL,  -- 空間類型字段SPATIAL INDEX idx_position (position)  -- 空間索引
);-- 表已存在時添加空間索引
CREATE SPATIAL INDEX idx_geo ON locations(position);

注意事項:

  • 索引名(如?idx_email)建議遵循?idx_字段名?格式,便于識別。
  • 復合索引的字段順序會影響查詢效率,應將查詢頻率高的字段放在前面。
  • 過多索引會降低插入 / 更新 / 刪除的性能,需根據業務查詢頻率權衡。

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

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

相關文章

【計算機視覺與深度學習實戰】08基于DCT、DFT和DWT的圖像變換處理系統設計與實現(有完整代碼python3.13可直接粘貼使用)

1. 引言 數字圖像處理作為計算機視覺和信號處理領域的重要分支,在過去幾十年中得到了快速發展。圖像變換技術作為數字圖像處理的核心技術之一,為圖像壓縮、特征提取、去噪和增強等應用提供了強有力的數學工具。離散余弦變換(Discrete Cosine Transform, DCT)、離散傅里葉變…

使用Python實現DLT645-2007智能電表協議

文章目錄&#x1f334;通訊支持&#x1f334; 功能完成情況服務端架構設計一、核心模塊劃分二、數據層定義三、協議解析層四、通信業務層&#xff08;以DLT645服務端為例&#xff09;五、通信層&#xff08;以TCP為例&#xff09;使用例子&#x1f334;通訊支持 功能狀態TCP客…

未來已來:基于IPv6單棧隔離架構的安全互聯實踐報告

未來已來&#xff1a;基于IPv6單棧隔離架構的安全互聯實踐報告 報告摘要 隨著IPv4地址資源徹底枯竭&#xff0c;全球網絡基礎設施正加速向IPv6單棧&#xff08;IPv6-Only&#xff09;演進。傳統“IPv4為主、IPv6為輔”的雙棧模式已無法滿足數字化轉型對海量地址、端到端連接與原…

Ubuntu24.04 安裝 Zabbix

Ubuntu24.04 安裝 Zabbix 環境&#xff1a; 軟件版本Ubuntu24.04.3Nginx1.24.0MySQL8.4.6PHP8.3.6phpMyAdmin5.2.2Zabbix7.4.1 LNMP 1. 更新本地軟件包索引并升級已安裝軟件 更新可用軟件包列表 把已安裝的軟件升級到最新版 安裝常用工具 sudo apt update && sud…

【動手學深度學習】6.2. 圖像卷積

目錄6.2. 圖像卷積1&#xff09;互相關運算2&#xff09;卷積層3&#xff09;圖像中目標的邊緣檢測4&#xff09;學習卷積核5&#xff09;互相關與卷積6&#xff09;特征映射和感受野7&#xff09;小結. 6.2. 圖像卷積 卷積神經網絡的設計是用于探索圖像數據&#xff0c;本節…

游戲引擎中的Billboard技術

一.視覺公告板為解決場景中Mesh網格面數過多問題,使用2D平面Mesh替換為3D平面Mesh的技術即為Billboard技術.常用于場景中植被,樹葉,粒子系統等對面數有要求的場景.二.Billboard著色器實現著色器輸入參數:攝像機坐標,網格坐標,攝像機觀察方向著色器輸出:實際2D平面隨視角不變

vue-admin-template權限管理

在基于 vue-admin-template 實現權限管理時&#xff0c;通常需要結合角色權限模型和動態路由機制&#xff0c;以滿足不同用戶角色對頁面訪問權限的控制需求。分為路由頁面權限和按鈕權限&#xff1a;下面是具體實現思路的思維導圖和具體代碼流程&#xff1a;0.實現邏輯思維導圖…

微信小程序,事件總線(Event Bus) 實現

1、util.js文件/*** 事件總線*/ function createEventBus() {// 私有事件存儲對象&#xff0c;通過閉包保持私有性const events {};return {/*** 監聽事件&#xff0c;只執行一次* param {string} eventName - 事件名稱* param {Function} callback - 回調函數*/once(eventNam…

OpenCV結構光三維重建類cv::structured_light::GrayCodePattern

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::structured_light::GrayCodePattern 是 OpenCV 庫中用于結構光三維重建 的一個類&#xff0c;屬于 OpenCV 的 structured_light 模塊。 它用于…

變頻器實習DAY35 引腳電平測試 退耦電阻

目錄變頻器實習DAY35一、工作內容1.1 硬性平臺RO7測試二、學習內容2.1 退耦電阻核心原理&#xff1a;2大特性抑制干擾四大關鍵作用選型&#xff1a;4個核心參數典型應用場景四大常見誤區附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器實習DAY35 一、工作內容 1.1 硬性…

C++標準庫算法:從零基礎到精通

算法庫的核心理念與設計哲學 C標準庫算法的設計遵循著一個令人稱道的哲學&#xff1a;算法與容器的分離。這種設計并非偶然&#xff0c;而是經過深思熟慮的結果。傳統的面向對象設計可能會將排序功能綁定到特定的容器類中&#xff0c;但C標準庫卻選擇了一條更加優雅的道路——…

為什么存入數據庫的中文會變成亂碼

從產生、傳輸、處理到最終存儲的整個生命周期中采用統一且正確的字符集編碼。具體原因紛繁復雜&#xff0c;主要歸結為&#xff1a;客戶端操作系統或應用與數據庫服務端字符集編碼不一致、Web應用服務器到數據庫驅動的連接層編碼配置缺失或錯誤、數據庫本身及其表、字段各層級的…

13種常見機器學習算法面試總結(含問題與優質回答)

目錄 1. K近鄰&#xff08;K-NN&#xff09; 2. 線性回歸&#xff08;一元/多元&#xff09; 3. 邏輯回歸 4. 決策樹 5. 集成學習之隨機森林 6. 貝葉斯&#xff08;樸素/高斯&#xff09; 7. SVM&#xff08;支持向量機&#xff09; 8. K-means聚類 9. DBSCAN 10. TF-…

sfc_os!SfcValidateFileSignature函數分析之WINTRUST!SoftpubLoadMessage

第一部分&#xff1a;0: kd> kc# 00 WINTRUST!SoftpubLoadMessage 01 WINTRUST!_VerifyTrust 02 WINTRUST!WinVerifyTrust 03 sfc_os!SfcValidateFileSignature 04 sfc_os!SfcGetValidationData 05 sfc_os!SfcValidateDLL 06 sfc_os!SfcQueueValidationThread 07 kernel32!B…

python寫上位機并打包250824

1.python寫的串口上位機軟件程序 import serial import serial.tools.list_ports import tkinter as tk from tkinter import ttk, scrolledtext, messagebox, filedialog import threading import time from datetime import datetime class SerialPortAssistant: def init(se…

Wagtail CRX 簡介

Wagtail CRX&#xff08;前身為 CodeRed CMS&#xff0c;由 CodeRed Corp 開發&#xff09;是一個基于 Wagtail 的 CMS 擴展包&#xff0c;主要用于快速構建營銷型網站&#xff0c;提供預置組件和增強功能。最新版本為 5.0.1&#xff08;發布于 2025 年 5 月 9 日&#xff09;。…

docker compose 安裝zabbix 7

docker compose 安裝zabbix 7 1.環境 # hostnamectlStatic hostname: ky10Icon name: computer-vmChassis: vmMachine ID: f554764e21b74c2fa057d9aaa296af63Boot ID: 4c155f0185c24a14970ab5ea60de34f4Virtualization: vmwareOperating System: Kylin Linux Advanced Server…

EtherCAT的幾種郵箱通信介紹

1. COE&#xff08;CANopen over EtherCAT&#xff09;技術特點&#xff1a;直接復用 CANopen 的對象字典&#xff08;Object Dictionary&#xff09;機制&#xff0c;通過 EtherCAT 的郵箱通信實現非周期性數據交換&#xff0c;同時支持過程數據對象&#xff08;PDO&#xff0…

【Java】springboot的自動配置

如果你用過 Spring Boot&#xff0c;一定對 “引入依賴就能用” 的體驗印象深刻 —— 加個spring-boot-starter-web就有了 Web 環境&#xff0c;這個是 SpringBoot 的自動裝配&#xff08;Auto-Configuration&#xff09;機制。自動裝配的核心注解自動裝配的邏輯看似復雜&#…

高通機型QPST平臺線刷教程 線刷全分區 只通過引導文件提取單分區 寫入單分區

高通芯片機型刷機平臺很多&#xff0c;除過一些廠家專用的平臺外。qpst是高通芯片類通用刷寫平臺。其操作簡單 可以刷寫完整固件。也可以通過單個引導文件來讀取 提取整個分區。而且包含讀寫基帶qcn等等的一些功能。 qpst工具下載 QPST 的不同版本可在多個開源平臺或技術論壇中…