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

溫馨提示×

溫馨提示×

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

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

MySQL8.0特性之不可見索引講析

發布時間:2020-04-27 14:44:40 來源:億速云 閱讀:278 作者:三月 欄目:MySQL數據庫

本文主要給大家介紹MySQL8.0特性之不可見索引講析,希望可以給大家補充和更新些知識,如有其它問題需要了解的可以持續在億速云行業資訊里面關注我的更新文章的。

MySQL8.0新特性——不可見索引(Invisible Indexes)

MySQL8.0開始支持看不見的索引。一個看不見的索引根本不被優化器使用,但是通常是保持正常的。默認情況下索引是可見的。不可見的索引使測試在查詢性能上刪除索引的效果成為可能,而不需要在需要索引的情況下進行破壞性的更改。

注意:

 該特性適用于除主鍵以外的索引(顯式或隱式)默認情況下索引是可見的!。

 將index設置為invisible,會導致優化器在選擇執行計劃時,自動忽略該索引,即便使用了FORCE INDEX

1、創建測試表t1,并創建3個不可見索引

mysql> CREATE TABLE t1 (i INT,j INT,k INT, INDEX i_idx (i) INVISIBLE) ENGINE = InnoDB;
mysql> CREATE INDEX j_idx ON t1 (j) INVISIBLE;   --創建不可見索引:j_idx
mysql> ALTER TABLE t1 ADD INDEX k_idx (k) INVISIBLE;  --創建不可見索引:k_idx
mysql> SELECT INDEX_NAME, IS_VISIBLE   FROM INFORMATION_SCHEMA.STATISTICS   WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1';   --可以看到3個索引都是不可見狀態
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| i_idx      | NO         |
| j_idx      | NO         |
| k_idx      | NO         |
+------------+------------+
3 rows in set (0.00 sec)


2、修改索引為可見狀態,也就是可使用的狀態

mysql> ALTER TABLE t1 ALTER INDEX i_idx VISIBLE;   --修改索引為可見狀態
mysql> SELECT INDEX_NAME, IS_VISIBLE   FROM INFORMATION_SCHEMA.STATISTICS   WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1';  --可以看到狀態為yes了。
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| i_idx      | YES        |
| j_idx      | NO         |
| k_idx      | NO         |
+------------+------------+
3 rows in set (0.00 sec)

注意:

主鍵索引是不能被設為不可見索引的!!!!!


一個沒有顯式主鍵的表可能仍然有一個有效的隱式主鍵,如果它在非空列上有任何惟一的索引。在這種情況下,第一個這樣的索引將同樣的約束放在表中行上,作為一個顯式的主鍵,而該索引不能被忽略。如下:


3、創建測試表:t2,并設置唯一索引:j_idx(這個表沒有明確主鍵,但是在NOT NULL列j上的索引在行上放置了相同的約束,可以作為主鍵)

mysql> CREATE TABLE t2 (i INT NOT NULL,j INT NOT NULL,UNIQUE j_idx (j)) ENGINE = InnoDB;  
Query OK, 0 rows affected (0.12 sec)
mysql> SELECT INDEX_NAME, IS_VISIBLE   FROM INFORMATION_SCHEMA.STATISTICS   WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't2';
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| j_idx      | YES        |
+------------+------------+
1 row in set (0.00 sec)

3.1、將索引設置為不可見索引:會發現報錯

mysql> ALTER TABLE t2 ALTER INDEX j_idx INVISIBLE;

ERROR 3522 (HY000): A primary key index cannot be invisible

  (報錯是因為:雖然這個表沒有明確的主鍵,但是在NOT NULL列j上的索引在行上放置了相同的約束,作為主鍵,不能被忽略:)


3.2、增加一個主鍵,如下:

mysql> ALTER TABLE t2 ADD PRIMARY KEY (i);   --增加一個主鍵
mysql> SELECT INDEX_NAME, IS_VISIBLE   FROM INFORMATION_SCHEMA.STATISTICS   WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't2';   --可以查看到有一個主鍵索引
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| j_idx      | YES        |
| PRIMARY    | YES        |
+------------+------------+
2 rows in set (0.00 sec)


3.3、這時候,將j_idx索引設置為不可見狀態是可以的,如:

mysql> ALTER TABLE t2 ALTER INDEX j_idx INVISIBLE;
mysql> SELECT INDEX_NAME, IS_VISIBLE   FROM INFORMATION_SCHEMA.STATISTICS   WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't2';
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| j_idx      | NO         |
| PRIMARY    | YES        |
+------------+------------+
2 rows in set (0.00 sec)

從上面可以看出,已經存了顯示的主機,而j_idx唯一索引不再充當隱式主鍵,因此可以將其設置為不可見狀態。


4、日常操作:


--創建表指定索引為不可見狀態:

create table t1(id int primary key,name varchar(10),index idx_name (name) invisible);



--修改索引為可見狀態:

alter table t1 alter index idx_name visible;



--修改索引為不可見狀態:

alter table t1 alter index idx_name invisible;


--查看數據庫中有哪些不可見索引:

mysql> select table_schema,table_name,index_name,column_name,is_visible from information_schema.statistics where is_visible='no';

看了以上關于MySQL8.0特性之不可見索引講析,希望能給大家在實際運用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補充的地方,如有需要更加專業的解答,可在官網聯系我們的24小時售前售后,隨時幫您解答問題的。

 



向AI問一下細節

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

AI

黄冈市| 原平市| 灵川县| 灵山县| 紫阳县| 绵阳市| 鄂伦春自治旗| 台中县| 浪卡子县| 太仓市| 昌都县| 建宁县| 雅江县| 平顺县| 青田县| 玉林市| 峨眉山市| 阳城县| 尉氏县| 江安县| 乌鲁木齐市| 介休市| 多伦县| 苏尼特左旗| 抚远县| 方山县| 峨山| 巫溪县| 凤山县| 泗阳县| 石楼县| 简阳市| 集贤县| 布拖县| 左权县| 甘谷县| 鸡东县| 望谟县| 于田县| 龙游县| 三门峡市|