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

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

詳解MySQL 8.0 之不可見索引

瀏覽:36日期: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 數據庫
相關文章:
主站蜘蛛池模板: 桥架-槽式电缆桥架-镀锌桥架-托盘式桥架 - 上海亮族电缆桥架制造有限公司 | 板材品牌-中国胶合板行业十大品牌-环保板材-上海声达板材 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 苏州注册公司_苏州代理记账_苏州工商注册_苏州代办公司-恒佳财税 | 科客,主见不成见| 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 全屋整木定制-橱柜,家具定制-四川峨眉山龙马木业有限公司 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 成都离婚律师|成都结婚律师|成都离婚财产分割律师|成都律师-成都离婚律师网 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 带压开孔_带压堵漏_带压封堵-菏泽金升管道工程有限公司 |