目錄
根據不同的環境選擇對應的索引類型即可。 " >根據不同的環境選擇對應的索引類型即可。
alter table 表名 add index 索引名称(字段);
登入後複製
可以使用key取代index,且索引名稱可以省略,不加索引名預設以欄位名稱作為索引名稱。 " >
alter table 表名 add index 索引名称(字段);
登入後複製
可以使用key取代index,且索引名稱可以省略,不加索引名預設以欄位名稱作為索引名稱。
首頁 資料庫 mysql教程 mysql index是什麼意思

mysql index是什麼意思

Apr 13, 2023 pm 04:13 PM
mysql

在mysql中,index是指“索引”,是一種特殊的資料庫結構,由資料表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。透過索引,查詢資料時不用讀完記錄的所有信息,而只是查詢索引列;否則,資料庫系統將讀取每筆記錄的所有資訊進行比對。因此使用索引可以很大程度上提高資料庫的查詢速度,也有效的提高了資料庫系統的效能。

mysql index是什麼意思

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

在mysql中,index是指“索引”,是一種特殊的資料庫結構,由資料表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。

透過索引,查詢資料時不用讀完記錄的所有信息,而只是查詢索引列。否則,資料庫系統將讀取每筆記錄的所有資訊進行比對。

可以把索引比喻為新華字典的音序表。例如,要查「庫」字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接找到。這樣就可以大大節省時間。

因此,使用索引可以大幅提高資料庫的查詢速度,也有效的提高了資料庫系統的效能。

為什麼要使用索引

索引就是根據表中的一列或若干列依照一定順序建立的列值與記錄行之間的對應關係表,實質上是一張描述索引列的列值與原表中記錄行之間一一對應關係的有序表。

索引是 MySQL 中十分重要的資料庫對象,是資料庫效能調優技術的基礎,常用於實現資料的快速檢索。

在MySQL 中,通常有以下兩種方式存取資料庫表的行資料:

1) 順序存取

#順序存取是在資料表中實施全表掃描,從頭到尾逐行遍歷,直到在無序的行資料中找到符合條件的目標資料。

順序存取實作比較簡單,但是當表中有大量資料的時候,效率非常低。例如,在幾千萬條數據中尋找少量的數據時,使用順序存取方式將會遍歷所有的數據,花費大量的時間,顯然會影響資料庫的處理效能。

2) 索引存取

索引存取是透過遍歷索引來直接存取表中記錄行的方式。

使用這種方式的前提是對錶建立一個索引,在列上建立了索引之後,查找資料時可以直接根據該列上的索引找到對應記錄行的位置,從而快速地查找到數據。索引儲存了指定列資料值的指針,根據指定的排序順序對這些指針進行排序。

例如,在學生基本資料表 tb_students 中,如果基於 student_id 建立了索引,系統就建立了一張索引列到實際記錄的對應表。當使用者需要尋找 student_id 為 12022 的資料的時候,系統先在 student_id 索引上找到該記錄,然後透過映射表直接找到資料行,並且傳回該行資料。因為掃描索引的速度一般遠大於掃描實際資料行的速度,所以採用索引的方式可以大幅提高資料庫的工作效率。

簡而言之,不使用索引,MySQL 就必須從第一筆記錄開始讀取完整個表,直到找出相關的行。表越大,查詢資料所花費的時間就越多。如果表中查詢的欄位有索引,MySQL 就能快速到達一個位置去搜尋資料文件,而不必查看所有數據,這樣將會節省很大一部分時間。

索引的優缺點

索引有其明顯的優勢,也有其不可避免的缺點。

優點

索引的優點如下:

  • 透過建立唯一索引可以保證資料庫表中每一行資料的唯一性。

  • 可以為所有的 MySQL 欄位類型設定索引。

  • 可以大幅加快資料的查詢速度,這是使用索引最主要的原因。

  • 在實現資料的參考完整性方面可以加速表與表之間的連接。

  • 在使用分組和排序子句進行資料查詢時也可以顯著減少查詢中分組和排序的時間

缺點

增加索引也有許多不利的方面,主要如下:

  • #建立和維護索引組要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。

  • 索引需要佔磁碟空間,除了資料表佔資料空間以外,每個索引還要佔一定的實體空間。如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案尺寸。

  • 當資料表中的資料增加、刪除和修改的時候,索引也要動態維護,這樣就降低了資料的維護速度。

使用索引時,需要綜合考慮索引的優點和缺點。

索引可以提高查詢速度,但會影響插入記錄的速度。因為,在有索引的表中插入記錄時,資料庫系統會依照索引進行排序,這樣就降低了插入記錄的速度,插入大量記錄時的速度影響會更加明顯。在這種情況下,最好的方法是先刪除表中的索引,然後插入數據,插入完成後,再建立索引。

索引設計原則

1)要注意,索引也是要佔用磁碟空間的,所以並不是越多越好。

2)過多的索引會影響INSERT,DELETE,UPDATE等語句的執行效率。

3)資料過少不建議建立索引。

4)對於唯一性約束,應使用對應的唯一性索引。

5)盡量不對區分度低的欄位建立索引。例如:枚舉類型的性別欄位只有男女,起不到最佳化效果。

6)建議在建立表格的時候建立索引。若表中有大量記錄,那麼將列建為索引後,表中所有記錄都會修改。

7)不經常查詢的字段,不建議建立索引。

索引類型

普通索引基本索引方式,無特別說明#唯一性索引資料唯一,允許有null主鍵索引表中只有一個主鍵,資料唯一,不允許有null複合索引可以包含兩個或多個欄位的索引方式
類型

根據不同的環境選擇對應的索引類型即可。

建立索引語法

以普通索引為例,在建立表格的時候建立索引

create table 表名(
 字段定义…
 index 索引名称(字段));
登入後複製

以普通索引為例,將資料表修改為索引

alter table 表名 add index 索引名称(字段);
登入後複製
可以使用key取代index,且索引名稱可以省略,不加索引名預設以欄位名稱作為索引名稱。

普通索引

沒啥要注意的,最基礎的索引方式。

建立一個表,並且建立普通索引,索引列為id

mysql> create table test1(id int,name varchar(5),age tinyint,index index_id(id));
登入後複製

查看表結構,在key下的MUL就代表著普通索引

mysql> desc test1;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  | MUL | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
| age   | tinyint(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
登入後複製

查看索引信息

mysql> show index from test1\G
*************************** 1. row ***************************
        Table: test1
   Non_unique: 1
     Key_name: index_id		
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL
1 row in set (0.00 sec)
登入後複製
在表中加入一些數據,用於測試
mysql> insert into test1 values(1,'张三',21),(2,'李四',22),(3,'王五',23),(4,'赵六',24);
登入後複製

透過

explain

執行sql查詢語句,先不通過索引,查詢姓名為趙六的記錄。

mysql> explain select * from test1 where name='赵六'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test1
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4
     filtered: 25.00
        Extra: Using where
1 row in set, 1 warning (0.00 sec)
登入後複製

type:ALL項目表示全表掃描,rows: 4表示行數。因為趙六是表中最後一筆記錄,所以查詢遍歷了整張表。

接下來透過索引列id對姓名為趙六的欄位進行查詢。

mysql> explain select * from test1 where id=4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test1
   partitions: NULL
         type: ref
possible_keys: index_id
          key: index_id
      key_len: 5
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)
登入後複製
rows: 1表示只檢索了一行便將記錄查找出來了,高下立判。

唯一索引

在唯一索引中,索引列中資料唯一,不能出現重複的值,用來約束內容,允許有null值。

語法:

create table 表名(
 字段定义…
 unique key 索引名(字段名));
登入後複製

唯一索引常用在值不能重複的字段,身分證號,手機號碼等等。

建立一個表,並且建立唯一性索引,索引列為手機號。

mysql> create table test2(id int,name varchar(5),phone int,unique key unique_key_phone(phone));
登入後複製

查看表結構,key下為UNI的表示為唯一性索引

mysql> desc test2;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  |     | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
| phone | int(11)    | YES  | UNI | NULL    |       |
+-------+------------+------+-----+---------+-------+
登入後複製

插入數據,並測試特性

mysql> insert into test2 values(1,'张三',1111111111);
mysql> insert into test2 values(2,'李四',null);	#可以为null
mysql> insert into test2 values(3,'王五',1111111111);	#值必须唯一
ERROR 1062 (23000): Duplicate entry '1111111111' for key 'unique_key_phone'
登入後複製
查看表數據
mysql> select * from test2;
+------+--------+------------+
| id   | name   | phone      |
+------+--------+------------+
|    2 | 李四   |       NULL |
|    1 | 张三   | 1111111111 |
+------+--------+------------+
登入後複製

主鍵索引

主鍵索引也就是設定主鍵,每個表最多只能有一個主鍵。主鍵列值必須唯一,且不允許有空值。

語法:

create table 表名(欄位primary key);



create table 表名(

欄位定義…

primary key 索引名稱(字段));

建立一個表,並且設定為主鍵索引,索引列為id

mysql> create table test3(id int primary key,name varchar(5),age tinyint);
登入後複製

查看表結構,key下為PRI的為主鍵索引列

mysql> desc test3;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | NO   | PRI | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
| age   | tinyint(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
登入後複製

插入數據,並測試特性

mysql> insert into test3 values(1,'张三',23);
mysql> insert into test3 values(null,'张三',23);	#不能为null
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into test3 values(1,'张三',23);	#值不能重复
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
登入後複製
查看表數據
mysql> select * from test3;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   23 |
+----+--------+------+
登入後複製

複合索引

######### ###複合索引可以包含兩個或多個欄位。 ######沒有特定語法,可以為表建立雙索引######建立一個表,並設定為複合主鍵,索引列為id,name###
mysql> create table test4 (id int,name varchar(5),age tinyint,primary key(id,name));
登入後複製
###複合主鍵特性和主鍵有些不同,只需要有一個欄位不重複即可。 ###
mysql> insert into test4 values(1,'张三',21);
mysql> insert into test4 values(1,'李四',21);
mysql> insert into test4 values(1,'张三',21);	#主键列全重复
ERROR 1062 (23000): Duplicate entry '1-张三' for key 'PRIMARY'
登入後複製
###查看表格資料###
mysql> select * from test4;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   21 |
|  1 | 李四   |   21 |
+----+--------+------+
登入後複製
###【相關推薦:###mysql影片教學###】####

以上是mysql index是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1668
14
CakePHP 教程
1427
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 Apr 18, 2025 am 08:42 AM

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。

在MySQL中解釋外鍵的目的。 在MySQL中解釋外鍵的目的。 Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

比較和對比Mysql和Mariadb。 比較和對比Mysql和Mariadb。 Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

See all articles