您现在的位置是:主页 > 数据库技术 > 数据库技术

MySQL 8.x中新增了哪些索引方式

IDCBT2022-01-01服务器技术人已围观

简介本篇内容介绍了“MySQL 8.x中新增了哪些索引方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

本篇内容介绍了“MySQL 8.x中新增了哪些索引方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、隐藏索引1.隐藏索引概述

    MySQL 8.0开始支持隐藏索引(invisible index),不可见索引。

    隐藏索引不会被优化器使用,但仍然需要进行维护。

    应用场景:软删除、灰度发布。

    在之前MySQL的版本中,只能通过显式的方式删除索引,如果删除后发现索引删错了,又只能通过创建索引的方式将删除的索引添加回来,如果数据库中的数据量非常大,或者表比较大,这种操作的成本非常高。

    在MySQL 8.0中,只需要将这个索引先设置为隐藏索引,使查询优化器不再使用这个索引,但是,此时这个索引还是需要MySQL后台进行维护,当确认将这个索引设置为隐藏索引系统不会受到影响时,再将索引彻底删除。这就是软删除功能。

    灰度发布,就是说创建索引时,首先将索引设置为隐藏索引,通过修改查询优化器的开关,使隐藏索引对查询优化器可见,通过explain对索引进行测试,确认这个索引有效,某些查询可以使用到这个索引,就可以将其设置为可见索引,完成灰度发布的效果。

    2.隐藏索引操作

    (1)登录MySQL,创建testdb数据库,并在数据库中创建一张测试表t1

    mysql> create database if not exists testdb;
    Query OK, 1 row affected (0.58 sec)
    mysql> use testdb;
    Database changed
    mysql> create table if not exists t1(i int, j int);
    Query OK, 0 rows affected (0.05 sec)

    (2)在字段i上创建索引,如下所示。

    mysql> create index i_idx on t1(i);
    Query OK, 0 rows affected (0.34 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    (3)在字段j上创建隐藏索引,创建隐藏索引时,只需要在创建索引的语句后面加上invisible关键字,如下所示

    mysql> create index j_idx on t1(j) invisible;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    (4)查看t1表中的索引情况,如下所示

    mysql> show index from t1 \G
    *************************** 1. row ***************************
            Table: t1
       Non_unique: 1
         Key_name: i_idx
     Seq_in_index: 1
      Column_name: i
        Collation: A
      Cardinality: 0
         Sub_part: NULL
           Packed: NULL
             Null: YES
       Index_type: BTREE
          Comment: 
    Index_comment: 
          Visible: YES
       Expression: NULL
    *************************** 2. row ***************************
            Table: t1
       Non_unique: 1
         Key_name: j_idx
     Seq_in_index: 1
      Column_name: j
        Collation: A
      Cardinality: 0
         Sub_part: NULL
           Packed: NULL
             Null: YES
       Index_type: BTREE
          Comment: 
    Index_comment: 
          Visible: NO
       Expression: NULL
    2 rows in set (0.02 sec)

    标签:

    很赞哦! ()

本栏推荐