91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql可不可以創建聯合索引

發布時間:2022-06-15 16:32:57 來源:億速云 閱讀:652 作者:iii 欄目:MySQL數據庫

這篇文章主要介紹“mysql可不可以創建聯合索引”,在日常操作中,相信很多人在mysql可不可以創建聯合索引問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mysql可不可以創建聯合索引”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

mysql可以創建聯合索引。MySQL允許用戶創建一個最多包含16列的聯合索引,創建方法有兩個:1、創建表時創建,語法“CREATE TABLE 表名 (列名1 類型 PRIMARY KEY,列名2 類型,列名3 類型,...INDEX 索引名 (列名2,列名3...));”;2、修改表時創建,語法“CREATE INDEX 索引名 ON 表名(列名2,列名3,列名4);”。

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

什么是聯合索引?聯合索引的本質:最左匹配

兩個或更多個列上的索引被稱作聯合索引,聯合索引又叫復合索引。MySQL允許用戶創建一個最多包含16列的復合索引。

對于復合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側部分。

例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當最左側字段是常量引用時,索引就十分有效。

查詢優化器將復合索引用于測試索引中所有列的查詢,或者測試第一列,前兩列等的查詢。

如果在索引定義中以正確的順序指定列,則單個復合索引可以在同一個表上加速這些類型的查詢。

創建表時創建聯合索引

語法:

CREATE TABLE 表名 (
    c1 data_type PRIMARY KEY,
    c2 data_type,
    c3 data_type,
    c4 data_type,
    INDEX 索引名 (c2,c3,c4)
);

在此語法中,聯合索引由三列c2,c3和c4組成。

修改表時創建聯合索引

可以使用以下CREATE INDEX語句將復合索引添加到現有表:

CREATE INDEX 索引名 
ON 表名(c2,c3,c4);

請注意,如果您在(c1,c2,c3)上有復合索引,則您將在以下列組合之一上建立索引搜索功能:

(c1)
(c1,c2)
(c1,c2,c3)

例如:

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1;
 
 
SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2;
 
 
SELECT  
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2 AND 
    c3 = v3;

如果列不形成索引的最左前綴,則查詢優化器無法使用索引執行查找。例如,以下查詢無法使用復合進行查找:

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c3 = v3;

MySQL聯合索引示例

我們將使用示例數據庫中的employees表進行演示。

mysql可不可以創建聯合索引

以下語句在lastName和firstName列上創建聯合索引:

CREATE INDEX name 
ON employees(lastName, firstName);
  • 首先,name索引可用于指定lastName值的查詢中的查找,因為lastName列是索引的最左前綴。

  • 其次,name索引可用于指定lastName和firstName值組合的值的查詢。

name索引用于在以下的查詢查找:

1)查找姓氏為的員工 Patterson

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';

此查詢使用名稱索引,因為索引的最左邊前綴(即lastName列)用于查找。

您可以通過EXPLAIN在查詢中添加子句來驗證這一點:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';

這是輸出:

mysql可不可以創建聯合索引

2)查找姓氏Patterson和名字的員工Steve:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';

在此查詢中,兩個lastName和firstName列都用于查找,因此,它使用name索引。

我們來核實一下:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';

輸出是:

mysql可不可以創建聯合索引

3)查找姓氏Patterson和名字是Steve或的員工Mary:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');

此查詢類似于第二個查詢,其中兩個lastName和firstName列都用于查找。

以下語句驗證索引用法:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');

輸出是:

mysql可不可以創建聯合索引

查詢優化器不能在以下查詢中使用name索引進行查找,因為只使用了firstName不是索引最左前綴的列:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Leslie';

類似地,查詢優化器不能在以下查詢中使用名稱索引進行查找,因為firstName或者lastName列用于查找。

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Anthony' OR
    lastName = 'Steve';

到此,關于“mysql可不可以創建聯合索引”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌宁县| 东乡县| 德阳市| 桓台县| 南澳县| 泰安市| 兴宁市| 新巴尔虎左旗| 通辽市| 金塔县| 全南县| 卓资县| 新津县| 杭锦旗| 桐柏县| 江口县| 房山区| 石狮市| 黄石市| 沐川县| 天柱县| 江门市| 监利县| 南昌市| 六安市| 洪泽县| 五原县| 永宁县| 曲水县| 昌乐县| 东平县| 行唐县| 新竹市| 廉江市| 滦南县| 石棉县| 夏津县| 晴隆县| 沧州市| 郴州市| 长宁县|