日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL索引分类

發布時間:2025/5/22 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL索引分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)、主鍵索引
設定為主鍵后數據庫會自動建立索引,innodb為聚簇索引
(1)如果表定義了主鍵,則PK就是聚集索引;
(2)如果表沒有定義主鍵,則第一個非空唯一索引(not NULL unique)列是聚集索引;
(3)否則,InnoDB會創建一個隱藏的row-id作為聚集索引;(這個row-id是6位的,所以盡量我們指定主鍵)

#隨表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNED AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),PRIMARY KEY(id) ); #使用AUTO_INCREMENT關鍵字的列必須有索引(只要有索引就行)。 CREATE TABLE customer2 (id INT(10) UNSIGNED,customer_no VARCHAR(200),customer_name VARCHAR(200),PRIMARY KEY(id) ); #單獨建主鍵索引: ALTER TABLE customer add PRIMARY KEY customer(customer_no); #刪除建主鍵索引: ALTER TABLE customer drop PRIMARY KEY ; #修改建主鍵索引: #必須先刪除掉(drop)原索引,再新建(add)索引

(2)、單值索引
即一個索引只包含單個列,一個表可以有多個單列索引

#隨表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNED AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),PRIMARY KEY(id),KEY (customer_name) ); #隨表一起建立的索引 索引名同 列名(customer_name) #單獨建單值索引: CREATE INDEX idx_customer_name ON customer(customer_name); #刪除索引: DROP INDEX idx_customer_name ;

(3)、唯一索引
索引列的值必須唯一,但允許有空值

#隨表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNED AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),PRIMARY KEY(id),KEY (customer_name),UNIQUE (customer_no) ); #建立 唯一索引時必須保證所有的值是唯一的(除了null),若有重復數據,會報錯。 #單獨建唯一索引: CREATE UNIQUE INDEX idx_customer_no ON customer(customer_no); #刪除索引: DROP INDEX idx_customer_no on customer ;

(4)、復合索引
即一個索引包含多個列

在數據庫操作期間,復合索引比單值索引所需要的開銷更小(對于相同的多個列建索引)

當表的行數遠大于索引列的數目時可以使用復合索引

#隨表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNED AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),PRIMARY KEY(id),KEY (customer_name),UNIQUE (customer_name),KEY (customer_no,customer_name) ); #單獨建索引: CREATE INDEX idx_no_name ON customer(customer_no,customer_name); #刪除索引: DROP INDEX idx_no_name on customer ;

基本語法

創建:ALTER mytable ADD [UNIQUE ] INDEX [indexName] ON (columnname(length))

刪除:DROP INDEX [indexName] ON mytable;

查看:SHOW INDEX FROM table_name\G

有四種方式來添加數據表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現多次。

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引為 FULLTEXT ,用于全文索引。

哪些情況需要創建索引

主鍵自動建立唯一索引

頻繁作為查詢條件的字段應該創建索引(where 后面的語句)

查詢中與其它表關聯的字段,外鍵關系建立索引

單鍵/組合索引的選擇問題,who?(在高并發下傾向創建組合索引)

查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度

查詢中統計或者分組字段

哪些情況不要創建索引

表記錄太少

經常增刪改的表:提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。 因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件

Where條件里用不到的字段不創建索引

數據重復且分布平均的表字段,因此應該只為最經常查詢和最經常排序的數據列建立索引,某個數據列包含許多重復的內容,建立索引沒有太大實際效果。

總結

以上是生活随笔為你收集整理的MySQL索引分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。