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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则

發布時間:2024/9/27 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://blog.csdn.net/tomorrow_fine/article/details/78337735

1.MySQL在創建數據表的時候創建索引

在MySQL中創建表的時候,可以直接創建索引。基本的語法格式如下:

CREATE TABLE 表名(字段名 數據類型 [完整性約束條件],[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY[索引名](字段名1 [(長度)] [ASC | DESC]) );

UNIQUE: 可選。表示索引為唯一性索引。
FULLTEXT; 可選。表示索引為全文索引。
SPATIAL: 可選。表示索引為空間索引。
INDEX和KEY: 用于指定字段為索引,兩者選擇其中之一就可以了,作用是一樣的。
索引名: 可選。給創建的索引取一個新名稱。
字段名1: 指定索引對應的字段的名稱,該字段必須是前面定義好的字段。
長度: 可選。指索引的長度,必須是字符串類型才可以使用。
ASC: 可選。表示升序排列。
DESC: 可選。表示降序排列。

1.1 MySQL創建普通索引

創建一個普通索引時,不需要加任何UNIQUE、FULLTEXT或者SPATIAL參數。

實例:創建一個名為index1的數據表,在表內的id字段上建立一個普通索引。

1. 創建普通索引的SQL代碼如下:

CREATE TABLE index1(id INT,name VARCHAR(20),sex BOOLEAN,INDEX(id) );

查看MySQL創建普通索引的操作效果。如下圖所示:

從上圖中可以看出,運行結果顯示普通索引創建成功。

2. 使用SHOW CREATE TABLE語句查看表的結構。如下圖所示:
或者通過1步驟,可以看出,在id字段上已經建立了一個名為id的普通索引。語句:

KEY `id` (`id`)

圓括號內的id是字段名稱,圓括號左側外面的id是索引名稱。

3. 使用EXPLAIN語句查看索引是否被使用。SQL代碼如下:

EXPLAIN SELECT * FROM index1 WHERE id = 1;

使用EXPLAIN語句查看索引是否被使用的操作效果。如下圖所示:

上圖中的結果顯示,possible_keys和key的值都為id。說明id索引已經存在,并且查詢時已經使用了索引。

1.2 MySQL創建唯一性索引

如果使用UNIQUE參數進行約束,則可以創建唯一性索引。

實例:創建一個名為index2的數據表,在表內的id字段上建立一個唯一性索引,并且設置id字段以升序的形式排列。
1. 創建一個唯一性索引的SQL代碼如下:

CREATE TABLE index2( id INT UNIQUE, NAME VARCHAR(20), UNIQUE INDEX index2_id(id ASC) );

index2_id是為唯一性索引起的一個新名字。

查看MySQL創建唯一性索引的操作效果。如下圖所示:

從上圖中可以看出,運行結果顯示創建成功。

2. 使用SHOW CREATE TABLE語句查看表的結構。SQL代碼如下:

SHOW CREATE TABLE index2 \G
在DOS提示符窗口中查看使用SHOW CREATE TABLE語句查看表的結構的效果。也可以通過上面的1步驟看到,在id字段上建立了名為id和index2_id的兩個唯一性索引。這樣做,可以提高數據的查詢速度。

如果在創建index2表時,id字段沒有進行唯一性結束。如下所示:

CREATE TABLE index2( id INT, name VARCHAR(20), UNIQUE INDEX index2_id(id ASC) );

則也可以在id字段上成功創建名為index2_id的唯一性索引。但是,這樣可能達不到提高查詢速度的目的。

1.3 MySQL創建全文索引

全文索引使用FULLTEXT參數,并且只能在CHAR、VARCHAR或TEXT類型的字段上創建。
全文索引可以用于全文搜索。
現在,MyISAM存儲引擎和InnoDB存儲引擎都支持全文索引。
實例:創建一個名為index3的數據表,在表中的info字段上建立名為index3_info的全文索引。

1. 創建全文索引的SQL代碼如下:

CREATE TABLE index3(id INT, info VARCHAR(20), FULLTEXT INDEX index3_info(info) )ENGINE=MyISAM;

如果設置ENGINE=InnoDB,則可以在InnoDB存儲引擎上創建全文索引。

查看MySQL創建全文索引的操作效果。如下圖所示:

從上圖中可以看出,代碼的執行結果顯示創建成功。

2. 使用SHOW CREATE TABLE語句查看index3數據表的結構。如下圖所示:
從上圖中可以看出,在info字段上已經建立了一個名為index3_info的全文索引。
注意
我使用的是MySQL 5.6.19版本,已經可以在InnoDB存儲引擎中創建全文索引了。

全文索引非常適合于大型數據集,對于小的數據集,它的用處可能比較小。

1.4 MySQL創建單列索引

單列索引是在數據表的單個字段上創建的索引。一個表中可以創建多個單列索引。唯一性索引和普通索引等都為單列索引。

實例:創建一個名為index4的數據表,在表中的subject字段上建立名為index4_st的單列索引。

1. 創建單列索引的SQL代碼如下:

CREATE TABLE index4( id INT, subject VARCHAR(30), INDEX index4_st(subject(10)) );

查看MySQL創建單列索引的操作效果。如下圖所示:

從上圖中可以看出,代碼執行的結果顯示創建成功。

2. 使用SHOW CREATE TABLE語句 或 manage index 查看index4數據表的結構。如下圖所示:

從上圖中可以看出,在subject字段上已經建立了一個名為index4_st的單列索引。

注意:subject字段長度為30,而index4_st設置的索引長度只有10,這樣做是為了提高查詢速度。對于字符型的數據,可以不用查詢全部信息,而只查詢它前面的若干字符信息。

1.5 MySQL創建多列索引

創建多列索引是在表的多個字段上創建一個索引。

實例:創建一個名為index5的數據表,在表中的name和sex字段上建立名為index5_ns的多列索引。

1. 創建多列索引的SQL代碼如下:

CREATE TABLE index5(id INT,
name VARCHAR(20),
sex CHAR(4),

INDEX index5_ns(name,sex)

);
在DOS提示符窗口中或可視化工具中查看MySQL創建多列索引的操作效果。如下圖所示:

從上圖中可以看出,代碼的執行結果顯示index5_ns索引創建成功。

從上圖中可以看出,name和sex字段上已經建立了一個名為index5_ns的多列索引。

2. 多列索引中,只有查詢條件中使用了這些字段中第一個字段時,索引才會被使用。

先在index5數據表中添加一些數據記錄,然后使用EXPLAIN語句可以查看索引的使用情況。如果只是使用name字段作為查詢條件進行查詢。如下圖所示:

EXPLAIN SELECT id,NAME,sex FROM index5;

EXPLAIN SELECT id,NAME,sex FROM index5 WHERE id = 3;

從上圖中可以看出,possible_keys和key的值都是index5_ns。Extra(額外信息)顯示正在使用索引。這說明使用name字段進行索引時,索引index5_ns已經被使用。

4. 如果只使用sex字段作為查詢條件進行查詢。如下圖所示:

EXPLAIN SELECT id,NAME,sex FROM index5 WHERE sex = '女';

從上圖中可以看出,possible_keys和key的值都是NULL。Extra(額外信息)顯示正在使用where條件查詢,而未使用索引。

提示

使用多列索引時一定要特別注意,只有使用了索引中的第一個字段時才會觸發索引。如果沒有使用索引中的第一個字段,那么這個多列索引就不會起作用。因此,在優化查詢速度時,可以考慮優化多列索引。

1.5 MySQL創建空間索引

使用SPATIAL參數能夠創建空間索引。創建空間索引時,表的存儲引擎必須是MyISAM類型。而且,索引字段必須有非空約束。

實例:創建一個名為index6的數據表,在表中的space字段上建立名為index6_sp的空間索引。

1. 創建空間索引的SQL代碼如下:

CREATE TABLE index6 ( id INT, SPACE GEOMETRY NOT NULL, SPATIAL INDEX index6_sp(SPACE) ) ENGINE=MYISAM;

在DOS提示符窗口中或可視化工具中查看MySQL創建空間索引的操作效果。如下圖所示:

從上圖可以看出,代碼執行的結果顯示空間索引創建成功。

  • 使用SHOW CREATE TABLE語句可看index6數據表的結構。如下圖所示:
    從上圖中可以看出,在space字段上已經建立了一個名為index6_sp的空間索引。從上圖中可以看出,在space字段上已經建立了一個名為index6_sp的空間索引。
  • 注意,space字段是非空的,而且數據類型是GEOMETRY類型。這個類型是空間數據類型。

    空間數據類型包括GEOMETRY、POINT、LINESTRING和POLYGON類型等。這些空間數據類型平時很少用到

    2 添加索引

    1.添加PRIMARY KEY(主鍵索引)
    mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )
    2.添加UNIQUE(唯一索引)
    mysql>ALTER TABLE table_name ADD UNIQUE (
    column
    )
    3.添加INDEX(普通索引)
    mysql>ALTER TABLE table_name ADD INDEX index_name ( column )
    4.添加FULLTEXT(全文索引)
    mysql>ALTER TABLE table_name ADD FULLTEXT ( column)
    5.添加多列索引
    mysql>ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

    3 建立索引常用的規則

    轉:https://www.cnblogs.com/JimLy-BUG/p/6812682.html
    建立索引常用的規則如下:
    1、表的主鍵、外鍵必須有索引;
    2、數據量超過300萬的表應該有索引;
    3、經常與其他表進行連接的表,在連接字段上應該建立索引;
    4、經常出現在Where子句中的字段,非凡是大表的字段,應該建立索引;
    5、索引應該建在選擇性高的字段上(枚舉型字段不建索引);
    6、索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;
    7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:
    A、正確選擇復合索引中的主列字段,一般是選擇性較好的字段;
    B、復合索引的幾個字段是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?假如是,則可以建立復合索引;否則考慮單字段索引;
    C、假如復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引;
    D、假如復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段;
    E、假如既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引;
    8、頻繁進行數據操作的表,不要建立太多的索引;
    9、刪除無用的索引,避免對執行計劃造成負面影響;
    以上是一些普遍的建立索引時的判定依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低數據增加刪除時的性能,凡是對頻繁更新的表來說,負面影響更大

    總結

    以上是生活随笔為你收集整理的MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则的全部內容,希望文章能夠幫你解決所遇到的問題。

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