电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解MySQL 8.0 之不可見索引

瀏覽:37日期:2023-10-10 10:14:39

MySQL 8.0 從第一版release 到現在已經走過了4個年頭了,8.0版本在功能和代碼上做了相當大的改進和重構。和DBA圈子里的朋友交流,大部分還是5.6 ,5.7的版本,少量的走的比較靠前采用了MySQL 8.0。為了緊追數據庫發展的步伐,能夠盡早享受技術紅利,我們準備將MySQL 8.0引入到有贊的數據庫體系。

落地之前 我們會對MySQL 8.0的新特性和功能,配置參數,升級方式,兼容性等等做一系列的學習和測試。以后陸陸續續會發布文章出來。本文算是MySQL 8.0新特性學習的第一篇吧,聊聊 不可見索引。

不可見索引

不可見索引中的不可見是針對優化器而言的,優化器在做執行計劃分析的時候(默認情況下)是會忽略設置了不可見屬性的索引。

為什么是默認情況下,如果 optimizer_switch設置use_invisible_indexes=ON 是可以繼續使用不可見索引。

話不多說,我們先測試幾個例子

如何設置不可見索引

我們可以通過帶上關鍵字VISIBLE|INVISIBLE的create table,create index,alter table 設置索引的可見性。

mysql> create table t1 (i int, > j int, > k int, > index i_idx (i) invisible) engine=innodb;Query OK, 0 rows affected (0.41 sec)mysql> create index j_idx on t1 (j) invisible;Query OK, 0 rows affected (0.19 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> alter table t1 add index k_idx (k) invisible;Query OK, 0 rows affected (0.10 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> select index_name,is_visible from information_schema.statistics where table_schema=’test’ and table_name=’t1’;+------------+------------+| INDEX_NAME | IS_VISIBLE |+------------+------------+| i_idx | NO || j_idx | NO || k_idx | NO |+------------+------------+3 rows in set (0.01 sec)mysql> alter table t1 alter index i_idx visible;Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> select index_name,is_visible from information_schema.statistics where table_schema=’test’ and table_name=’t1’;+------------+------------+| INDEX_NAME | IS_VISIBLE |+------------+------------+| i_idx | YES || j_idx | NO || k_idx | NO |+------------+------------+3 rows in set (0.00 sec)

不可見索引的作用

面對歷史遺留的一大堆索引,經過數輪新老交替開發和DBA估計都不敢直接將索引刪除,尤其是遇到比如大于100G的大表,直接刪除索引會提升數據庫的穩定性風險。

有了不可見索引的特性,DBA可以一邊設置索引為不可見,一邊觀察數據庫的慢查詢記錄和thread running 狀態。如果數據庫長時間沒有相關慢查詢 ,thread_running比較穩定,就可以下線該索引。反之,則可以迅速將索引設置為可見,恢復業務訪問。

Invisible Indexes 是 server 層的特性,和引擎無關,因此所有引擎(InnoDB, TokuDB, MyISAM, etc.)都可以使用。

設置完不可見索引,執行計劃無法使用索引

mysql> show create table t2 G*************************** 1. row *************************** Table: t2Create Table: CREATE TABLE `t2` ( `i` int NOT NULL AUTO_INCREMENT, `j` int NOT NULL, PRIMARY KEY (`i`), UNIQUE KEY `j_idx` (`j`) /*!80000 INVISIBLE */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.01 sec)mysql> insert into t2(j) values(1),(2),(3),(4),(5),(6),(7);Query OK, 7 rows affected (0.04 sec)Records: 7 Duplicates: 0 Warnings: 0mysql> explain select * from t2 where j=3G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t2 partitions: NULL type: ALLpossible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 filtered: 14.29 Extra: Using where1 row in set, 1 warning (0.01 sec)mysql> alter table t2 alter index j_idx visible;Query OK, 0 rows affected (0.08 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> explain select * from t2 where j=3G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t2 partitions: NULL type: constpossible_keys: j_idx key: j_idx key_len: 4 ref: const rows: 1 filtered: 100.00 Extra: Using index1 row in set, 1 warning (0.01 sec)

使用不可見索引的注意事項

The feature applies to indexes other than primary keys (either explicit or implicit).

不可見索引是針對非主鍵索引的。主鍵不能設置為不可見,這里的 主鍵 包括顯式的主鍵或者隱式主鍵(不存在主鍵時,被提升為主鍵的唯一索引) ,我們可以用下面的例子展示該規則。

mysql> create table t2 ( >i int not null, >j int not null , >unique j_idx (j) >) ENGINE = InnoDB;Query OK, 0 rows affected (0.16 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)### 沒有主鍵的情況下,唯一鍵被當做隱式主鍵,不能設置 不可見。mysql> alter table t2 alter index j_idx invisible;ERROR 3522 (HY000): A primary key index cannot be invisiblemysql>mysql> alter table t2 add primary key (i);Query OK, 0 rows affected (0.44 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> 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.01 sec)mysql> alter table t2 alter index j_idx invisible;Query OK, 0 rows affected (0.04 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> 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.01 sec)

force /ignore index(index_name) 不能訪問不可見索引,否則報錯。

mysql> select * from t2 force index(j_idx) where j=3;ERROR 1176 (42000): Key ’j_idx’ doesn’t exist in table ’t2’

設置索引為不可見需要獲取MDL鎖,遇到長事務會引發數據庫抖動

唯一索引被設置為不可見,不代表索引本身唯一性的約束失效

mysql> select * from t2;+---+----+| i | j |+---+----+| 1 | 1 || 2 | 2 || 3 | 3 || 4 | 4 || 5 | 5 || 6 | 6 || 7 | 7 || 8 | 11 |+---+----+8 rows in set (0.00 sec)mysql> insert into t2(j) values(11);ERROR 1062 (23000): Duplicate entry ’11’ for key ’t2.j_idx’

小結

其實沒啥說的,祝大家用的愉快。

-The End-

以上就是詳解MySQL 8.0 之不可見索引的詳細內容,更多關于MySQL 8.0 不可見索引的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓| 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 步入式高低温测试箱|海向仪器| 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 挨踢网-大家的导航! | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 |