• ADADADADAD

    MySQL 8.0新特性-不可见索引[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:14:37

    作者:文/会员上传

    简介:

    官方文档:https://dev.mysql.com/doc/refman/8.0/en/invisible-indexes.htmlMySQL 8.0 invisible index学习MySQL支持不可见索引,即优化器不会使用该索引。 不可见索引特性不

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    官方文档:https://dev.mysql.com/doc/refman/8.0/en/invisible-indexes.html

    MySQL 8.0 invisible index学习

    MySQL支持不可见索引,即优化器不会使用该索引。 不可见索引特性不可以用于主键。

    默认索引是可见的。可以在create table、create index、alter table操作中使用关键字visible、invisible来指定索引是否可见。

    createtablet1(iint,jint,kint,indexi_idx(i)invisible)engine=innodb;createindexj_idxont1(j)invisible;altertablet1addindexk_idx(k)invisible;

    修改已经存在的索引的可见性:

    altertablet1alterindexi_idxinvisible;altertablet1alterindexi_idxvisible;

    可以通过information_schema.statistics、show index查看索引的可见性:

    >selectindex_name,is_visible->frominformation_schema.statistics->wheretable_schema='abce'andtable_name='t1';+------------+------------+|INDEX_NAME|IS_VISIBLE|+------------+------------+|i_idx|NO|+------------+------------+1rowinset(0.00sec)>showindexfromt1;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+|Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment|Index_comment|Visible|Expression|+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+|t1|1|i_idx|1|i|A|0|NULL|NULL|YES|BTREE|||NO|NULL|+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+1rowinset(0.00sec)

    不可见索引可以用来测试移除索引后对查询性能的影响。毕竟对于大表,删除和重建索引是非常昂贵的操作。 系统变量optimizer_switch中的use_invisible_indexes标志控制了优化器是否使用不可见索引来构建执行计划。 如果use_invisible_indexes=off(默认设置),优化器会忽略不可见索引;如果设置为on,索引仍然不可见,但是优化器在生成执行计划的时候会考虑不可见索引。

    化器在生成执行计划的时候会考虑不可见索引。

    mysql>showvariableslike'%optimizer_switch%'index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=off,skip_scan=on|返回行数:[1],耗时:14ms.

    举例:

    altertablet1alterindexi_idxinvisible;

    索引设置为不可见,优化器便不考虑此索引,也就是说如果没有该特性,你就得删除该索引和重建该索引来测

    MySQL 8.0新特性-不可见索引.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysql特性可见