12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-12-03 12:14:37
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
官方文档: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支持不可见索引,即优化器不会使用该索引。 不可见索引特性不可以用于主键。
默认索引是可见的。可以在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;
索引设置为不可见,优化器便不考虑此索引,也就是说如果没有该特性,你就得删除该索引和重建该索引来测
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19