MYSQL8隐藏索引

2023-11-19

问题场景


    我们知道,索引太多会导致UPDATE/DELETE/INSERT的时候,引擎需要更新索引信息,产生额外的开销; 从而影响数据库性能; 所以需要清理无效索引;
    但是表是数年前建的,索引基本都不是自己添加的,无法准确判定是否可以删除,万一删错了,导致大的慢查询,引起事故就得不偿失了,表比较小的话,还可以重新添加,表的数据量如果非常大,新增索引的耗时就会非常大,到时候可能就只剩下跑路的份儿了;     在老的库中,经常会发现许多表索引空间比表空间占用还大的情况;
 

功能介绍  


于是乎:MYSQL 8.0 引入了隐藏索引功能; 
    可以设置索引INVISIBLE, 借助该功能来进行灰度删除; 当索引设置为INVISIBLE的时候,该索引对优化器不可见(默认情况下),并且及时表非常大的情况下,执行速度也非常快捷,且就地操作;

如果打算删除某个索引,却又不十分确定

1, 可以先设置为INVISIBLE, 查看涉及索引的相关查询执行计划

2, 分析对比慢日志;是否出现了新的慢查询;

3, 观察几天确认没有影响的情况下进行删除操作;


    注意:1,隐藏索引只针对辅助索引,无法对主键生效;
              2,虽然performance_schema.table_io_waits_summary_by_index_usage表可以查看索引是否使用,但并不十分准确;还是需要慎重判断; 

              3, 索引的INVISIBLE,并不影响索引树的维护,例如UPDATE的时候,依然会动态维护更新索引; 唯一索引INVISIBLE的时候,该列依然必须要保持唯一;

 

设置方法

1, CREATE TABLE 

    创建索引的时候,可以设置VISIBLE(默认值)/INVISIBLE字段来指定索引是否可见; 

create table dragonball(
id int auto_increment comment 'main key',
name varchar(20) default '' comment 'user name',
sex  varchar(1)  default '' comment '男/女',
skill varchar(10) default '' comment 'QWERDF',
primary key(id),
key idx_name(name) invisible,
key id_sex(sex)
)engine = innodb charset='utf8' comment '用户表';

2,alter table dragonball add key idx_skill(skill) invisible,alter index id_sex invisible;

   ALTER 添加索引的时候可以指定,或者修改现有索引为INVISIBLE;

3,  create index idx_skill on dragonball (skill) invisible;

       创建隐藏索引;

 

查看是否有隐藏索引

 

1, SHOW CREATE TABLE: 

     隐藏索引后面有注释: /*!80000 INVISIBLE */

mysql> show create table dragonball\G
*************************** 1. row ***************************
       Table: dragonball
Create Table: CREATE TABLE `dragonball` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'main key',
  `name` varchar(20) DEFAULT '' COMMENT 'user name',
  `sex` varchar(1) DEFAULT '' COMMENT '男/女',
  `skill` varchar(10) DEFAULT '' COMMENT 'QWERDF',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) /*!80000 INVISIBLE */,
  KEY `id_sex` (`sex`) /*!80000 INVISIBLE */,
  KEY `idx_skill` (`skill`) /*!80000 INVISIBLE */
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'
1 row in set (0.00 sec)

2,  show index from dragonball; 

     VISIBLE字段为YES,即可见,NO即不可见;

mysql> show index from dragonball;
+------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table      | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| dragonball |          0 | PRIMARY   |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| dragonball |          1 | idx_name  |            1 | name        | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | NO      | NULL       |
| dragonball |          1 | id_sex    |            1 | sex         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | NO      | NULL       |
| dragonball |          1 | idx_skill |            1 | skill       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | NO      | NULL       |
+------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
4 rows in set (0.01 sec)

3,  information_schema.STATISTICS.IS_VISIBLE 字段可以查看确认是否可见;

mysql>  select TABLE_SCHEMA,TABLE_NAME,INDEX_NAME,IS_VISIBLE from STATISTICS where table_schema='slower' and table_name='dragonball';
+--------------+------------+------------+------------+
| TABLE_SCHEMA | TABLE_NAME | INDEX_NAME | IS_VISIBLE |
+--------------+------------+------------+------------+
| slower       | dragonball | id_sex     | NO         |
| slower       | dragonball | idx_name   | NO         |
| slower       | dragonball | idx_skill  | NO         |
| slower       | dragonball | PRIMARY    | YES        |
+--------------+------------+------------+------------+

设置隐藏索引是否对执行计划生效:

optimizer_switch 变量下的use_invisible_indexes 开关,可以控制隐藏索引是否对查询执行计划生效; 

如果是OFF(默认值),如果索引被设置为INVISIBLE,则EXPLAIN/DESC 查看执行计划的时候,不命中该索引; 

如果是ON的时候, 索引的是否隐藏都不影响执行计划命中索引; 

举例:

#查看表结构:position_index和 sub_position_index被设置为INVISIBLE
mysql> show create table release_article\G
*************************** 1. row ***************************
       Table: release_article
Create Table: CREATE TABLE `release_article` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文章ID',
  `title` varchar(300) DEFAULT NULL COMMENT '文章标题',
  `type` int(11) DEFAULT NULL COMMENT '文章分类',
  `status` int(11) DEFAULT NULL COMMENT '文章状态',
  `index_image` varchar(300) DEFAULT NULL COMMENT '首图链接',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `publishtime` datetime DEFAULT NULL COMMENT '第一次发布时间',
  `top` tinyint(4) DEFAULT '0' COMMENT '是否置顶,1为置顶,0为非置顶',
  `top_order` tinyint(4) DEFAULT '4' COMMENT '置顶顺序,最多3篇置顶',
  `top_start_time` datetime DEFAULT NULL COMMENT '置顶开始时间',
  `top_end_time` datetime DEFAULT NULL COMMENT '置顶结束时间',
  `recommend` tinyint(4) DEFAULT '0' COMMENT '是否推荐,1为推荐,0为非推荐',
  `recommend_top` tinyint(4) DEFAULT '0' COMMENT '是否推荐置顶,1为推荐置顶,0为非推荐置顶',
  `recommend_top_order` tinyint(4) DEFAULT '4' COMMENT '推荐池文章置顶顺序,最多3篇',
  `recommend_top_start_time` datetime DEFAULT NULL COMMENT '推荐置顶开始时间',
  `recommend_top_end_time` datetime DEFAULT NULL COMMENT '推荐置顶结束时间',
  `is_choice` tinyint(4) DEFAULT '0' COMMENT '是否精选0 否 1是',
  `author_id` varchar(20) DEFAULT NULL COMMENT '发布者pin',
  `author_name` varchar(100) DEFAULT NULL COMMENT '发布者名',
  `source` int(1) DEFAULT '0' COMMENT '文章来源',
  `off_reason` varchar(300) DEFAULT NULL COMMENT '下线原因',
  `editor_letters` varchar(300) DEFAULT NULL COMMENT '编按',
  `operator` varchar(50) DEFAULT NULL COMMENT '操作者',
  `summary` varchar(2000) DEFAULT NULL,
  `audittime` datetime DEFAULT NULL COMMENT '审核时间',
  `audit_fail_reason` varchar(300) DEFAULT NULL COMMENT '审核失败原因',
  `tags` varchar(500) DEFAULT NULL COMMENT '标签id列表',
  `banner` varchar(4000) DEFAULT NULL COMMENT '文章末banner图',
  `to_audit` datetime DEFAULT NULL COMMENT '投稿时间提交审核时间',
  `video_flag` int(2) DEFAULT '0' COMMENT '视频标识(0:无,1:有)',
  `last_modify_time` datetime DEFAULT NULL COMMENT '最后一次上线时间',
  `position` tinyint(4) DEFAULT '0' COMMENT '子渠道标识,参照cms_discovery_release_channel表',
  `sub_position` int(11) DEFAULT NULL COMMENT '子渠道标识,参照cms_discovery_release_sub_channel表',
  `sub_title` varchar(512) DEFAULT NULL COMMENT '副标题',
  `introduction` varchar(100) DEFAULT NULL COMMENT '导语',
  `style` tinyint(2) DEFAULT '0' COMMENT '文本样式 0 :普通文本,1:攻略模板,2:视频购',
  `skus` varchar(1000) DEFAULT NULL COMMENT '文章内sku集合',
  `sku_num` tinyint(4) DEFAULT NULL COMMENT '文章内sku数量',
  `bi_list_show` tinyint(4) DEFAULT '1' COMMENT 'bi,1,0',
  `one_category` varchar(20) DEFAULT NULL COMMENT '一级品类',
  `two_category` varchar(20) DEFAULT NULL COMMENT '二级品类',
  `three_category` varchar(20) DEFAULT NULL COMMENT '三级品类',
  `pic_num` tinyint(4) DEFAULT '0' COMMENT '图集图片数目',
  `probation` tinyint(1) DEFAULT '0',
  `private_status` int(11) DEFAULT NULL COMMENT '私域状态,0下线,1上线',
  `extend_value` varchar(1000) DEFAULT '' COMMENT '文章扩展属性信息',
  `content_type` int(5) DEFAULT NULL COMMENT '文章内容分类',
  `index_video` bigint(20) DEFAULT NULL COMMENT '封面视频或主视频',
  `preview_video` bigint(20) DEFAULT NULL COMMENT '预览视频',
  PRIMARY KEY (`id`),
  KEY `article_type_index` (`type`),
  KEY `article_status_index` (`status`),
  KEY `article_recommend_index` (`recommend`),
  KEY `article_source_index` (`source`),
  KEY `article_title_index` (`title`(255)),
  KEY `position_index` (`position`) USING BTREE /*!80000 INVISIBLE */,
  KEY `sub_position_index` (`sub_position`) USING BTREE /*!80000 INVISIBLE */,
  KEY `idx_three_category` (`three_category`),
  KEY `idx_tags` (`tags`(255)),
  KEY `idx_publishtime` (`publishtime`),
  KEY `idx_last_modify_time` (`last_modify_time`),
  KEY `idx_author_id_status_modify_time` (`author_id`,`status`,`last_modify_time`),
  KEY `idx_top` (`top`),
  KEY `idx_recommend_top` (`recommend_top`),
  KEY `idx_style_createtime` (`style`,`createtime`),
  KEY `idx_sub_position` (`sub_position`,`bi_list_show`,`status`),
  KEY `idx_style_to_audit` (`style`,`to_audit`),
  KEY `IDX_SUB_POSITION_IS_CHOICE` (`sub_position`,`is_choice`)
) ENGINE=InnoDB AUTO_INCREMENT=234366805 DEFAULT CHARSET=utf8
#执行前查看use_invisible_indexes=off,默认值
mysql> select @@optimizer_switch\G
*************************** 1. row ***************************
@@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 row in set (0.00 sec)


#查看执行计划,命中的索引是:idx_author_id_status_modify_time
mysql> desc SELECT count(1) FROM release_article ar  WHERE ar.status != -1 and ar.author_id = '18316' AND position = 12  AND sub_position = 61\G              
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: ar
   partitions: NULL
         type: range
possible_keys: article_status_index,idx_author_id_status_modify_time,idx_sub_position,IDX_SUB_POSITION_IS_CHOICE
          key: idx_author_id_status_modify_time
      key_len: 68
          ref: NULL
         rows: 2719
     filtered: 0.00
        Extra: Using index condition; Using where
1 row in set, 1 warning (0.01 sec)

#修改变量:use_invisible_indexes=on;
mysql> set 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=on,skip_scan=on'
    -> ;
Query OK, 0 rows affected (0.00 sec)

#再次查看执行计划,此时看到命中的索引是:position_index,sub_position_index
mysql> desc SELECT count(1) FROM release_article ar  WHERE ar.status != -1 and ar.author_id = '18316' AND position = 12  AND sub_position = 61\G                            *************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: ar
   partitions: NULL
         type: index_merge
possible_keys: article_status_index,position_index,sub_position_index,idx_author_id_status_modify_time,idx_sub_position,IDX_SUB_POSITION_IS_CHOICE
          key: position_index,sub_position_index
      key_len: 2,5
          ref: NULL
         rows: 492
     filtered: 5.00
        Extra: Using intersect(position_index,sub_position_index); Using where
1 row in set, 1 warning (0.00 sec)

mysql> 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL8隐藏索引 的相关文章

  • 通过php将MYSQL数据导出到Excel/CSV

    我想通过 php 将 MYSQL 数据导出到 Excel CSV 这样我以后就可以使用我的数据库 或者有人可以使用并理解它 要使用适合 EXCEL 的语法创建 CSV 文件 您可以使用基本 SQL SELECT FROM mytable I
  • 自动生成序列号

    我编写了下面的计数代码 目的是让它为我的数据生成自动序列号 以代替删除行后的 MySQL 序列号 但是当我运行它时 我发现 MySQL 表中没有任何条目 后来我将代码更改为 Dreamweaver 插入记录 并观察到 SN 序列号 字段不需
  • 从同一mysql服务器的不同数据库复制表

    我有一台带有 2 个数据库的服务器 我想将多个表从一个数据库复制到另一个数据库 目的是我们使用项目中使用的相同用户表 正如在另一个表中使用 InnoDB 和用户表的外键一样 我选择了一种复制方式 为此我对 my cnf 进行了更改 mast
  • Dapper MySQL 返回值

    我在 ASP net Identity 项目中使用 dapper 和 MySql 时遇到问题 我想将用户插入到表 users 中 并希望从这次插入中返回自动生成的 id 但我收到语法错误 我不知道为什么 这是我的方法插入代码 public
  • 如何防止mysql隐式提交

    mysql文档 http dev mysql com doc refman 5 5 en implicit commit html指出某些语句将在事务期间导致隐式提交 例如 CREATE TABLE foo bar INT START TR
  • 如何像mysql一样对数组进行排序

    如何对与数据库数据相同的数组进行排序 我请求谷歌分析数据 数据是一个大数组 我想将数组与本地数据库中的一些其他字段连接起来 然后我再次扩展大数组 现在我想对大数组进行排序 这与使用我的 sql 相同 如下所示 select from ga
  • 从MySQL php中的特定列获取最大ID和最小ID

    我是新来的php现在尝试从中检索数据MySQL到安卓 这是我的工作细节 table In 检索总小时数函数 我想检索最短 ID 时间 and 最大 ID 超时 from MySQL到安卓通过php最后使用下面的代码来获取总小时数 假设 ID
  • 使用 PHP 连接到 Amazon RDS

    我正在尝试将 RDS 实例与 PHP 连接文件连接 这是我的文件中的内容 define DB SERVER localhost define DB USERNAME User Name define DB PASSWORD Password
  • 将一段文本保存到mysql

    我正在使用 php 和 mysql 做一个项目 我对此很陌生 现在我必须将一段文本存储到我的数据库中 在表中 对于列 I tried varchar 5000 创建表时但它不允许我 所以请给我一个解决方案 你的 mysql 字段类型应该 T
  • Laravel - 雄辩地覆盖自定义时间戳......为什么?

    我正在制作一个库存管理系统 当产品缺货时 我会在表中输入一个条目 并记下 oos at 字段和日期 时间 后来 当它回到库存时 我找到该条目并更新 restocked at 时间戳字段 但是 当我执行第二个操作时 我的 oos at 字段被
  • 具有 TINYTEXT 列的 CREATE TABLE 语句中出现语法错误 1064?

    这是我到目前为止的 MySQL 代码 CREATE DATABASE bankbase USE bankbase CREATE TABLE clienttable ClientID SMALLINT 15 NOT NULL DEFAULT
  • Python 字符串到 SQL IN 参数的列表

    我在 python 中有这个查询 ssim group S1200 S1300 query select WIPMessageCnt from waferdata where recipename in s and equipment an
  • 如何使用 PHP mysqli 增加 MySQL 中的值

    我在 MySQL 表中有一个整数列 名为col1 现在 我需要的是将其值增加某个数字 例如 1 可能是 2 3 或任何数字 也就是说 如果它的值已经是 10 现在我希望它变成 11 我知道 我可以通过首先选择原始值 用 PHP 增加它 然后
  • 错误:从上游读取响应标头时上游过早关闭连接 [uWSGI/Django/NGINX]

    我目前在用户正在进行的查询中总是得到 502 它通常返回 872 行 在 MySQL 中运行需要 2 07 然而 它返回了大量信息 每一行包含很多东西 有任何想法吗 运行 Django tastypie Rest API Nginx 和 u
  • 未捕获的错误:调用未定义的函数 mysql_connect() [重复]

    这个问题在这里已经有答案了 未捕获错误 调用 C xampp htdocs phoenixproject register php 9 中未定义的函数 mysql connect 堆栈跟踪 0 main 在第 9 行 C xampp htd
  • 为什么Mysql的Group By和Oracle的Group by行为不同

    为什么Mysql的Group By和Oracle的Group by行为不同 我多次发现 Mysql group By 功能和 Oracle 的 GroupBy 功能表现不同 很多时候我在Oracle中发现错误 这实际上是错误的查询 但是My
  • MySQL 中电话号码的最佳数据类型是什么?它的 Java 类型映射应该是什么?

    我正在将 MySQL 与 Spring JDBC 模板一起用于我的 Web 应用程序 我需要存储仅包含数字的电话号码 10 我对使用数据类型的数据类型有点困惑 MySQL 中最适合它的数据类型是什么 为此 Bean POJO 类中的 Jav
  • MySQL CREATE TABLE 语句上的外键错误(错误:150)

    我觉得我已经在一对非常简单的创建表语句上尝试了一切可能的方法 类型匹配 我尝试使用 ENGINE InnoDB 等 但很困惑为什么我收到外键错误 我已经离开 SQL 一段时间了 所以这可能是一个简单的问题 mysql gt CREATE T
  • PHP 从表行中检索数据并将其存储到变量

    我想这些问题已经说明了一切 我的查询结果会生成与条件匹配的行 我想从每个表列中获取每个数据并将其放入一个变量中 getinfo select user firstname user middlename user lastname from
  • 使用 Sequelize 计算关联条目数

    我有两张桌子 locations and sensors 每个条目在sensors有一个外键指向locations 使用 Sequelize 如何获取所有条目locations以及条目总数sensors与每个条目相关联locations R

随机推荐

  • python编程实验,模拟聪明版的尼姆游戏设计原理

    实验原理与内容 本实验完成一个模拟聪明版的尼姆游戏功能 尼姆游戏是个著名的游戏 有很多变种玩法 两个玩家轮流从一堆物品中拿走一部分 在每一步中 玩家可以自由选择拿走多少物品 但是必须至少拿走一个并且最多只能拿走一半物品 然后轮到下一个玩家
  • Python SQLAlchemy ( ORM )、dictalchemy、Flask-SQLAlchemy、Flask-migrate、flask-script、flask-upload

    From Python中强大的通用ORM框架 SQLAlchemy https zhuanlan zhihu com p 444930067 Python ORM之SQLAlchemy全面指南 https zhuanlan zhihu co
  • ubuntu 18.04安装wireshark及网卡接口权限问题

    1 安装 sudo apt fast install wireshark 第一次安装过程中可能会提示Should non superusers be able to capture packets 选是即可 默认是否 2 待安装成功后 你会
  • MFC 菜单栏的使用

    MFC 菜单栏的使用 主要介绍两种比较简单和常用的创建方法 一 在资源视图中添加菜单资源 通过鼠标点击添加菜单项 菜单栏设计好 以后就是添加了 介绍两种方法 1 很简单 鼠标右击想显示菜单栏的对话框属性 可以看到有一个menu的属性 点击就
  • Linux 宝塔面板的安装

    Ptw cwl 登录宝塔官网 查看宝塔的详情 www bt cn 安装 linux服务器图形化界面管理器 安装 宝塔面板 在xshell当中执行宝塔面板的安装命令 yum install y wget wget O install sh h
  • python批量处理

    python opencv图像二值化批量处理 from skimage import data dir io transform color filters import numpy as np import cv2 def convert
  • 红帽Redhat—Linux网卡聚合

    文章目录 一 实验环境设置 二 网卡聚合nmcli 配置步骤 1 创建聚合接口 2 配置网络属性 3 添加物理接口 4 激活端口 5 查看聚合接口状态 一 实验环境设置 在已经安装好的RHEL8 3添加两个新网卡 1 点击虚拟机 gt 设置
  • 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现

    前言 这几天一直都在研究模糊聚类 感觉网上的文档都没有一个详细而具体的讲解 正好今天有时间 就来聊一聊模糊聚类 一 模糊数学 我们大家都知道计算机其实只认识两个数字0 1 我们平时写程序其实也是这样if 1 then do 永远这种模式 在
  • C++实现String类

    C 实现String类 还没有完成 待继续 有以下注意的点 1 赋值操作符返回的是一个MyString 而重载的 返回的是一个MyString 其中的原因参看 effective c 主要是返回引用的时候 必须返回必须在此函数之前存在的引用
  • Android Studio安装教程+打包APK

    前言 这是一篇给新人的教程 如果你觉得简单啰嗦请保持冷静 同时如果本篇能给予到你帮助 是我的荣幸 Android Studio安装教程 点击链接下载Android Studio Android Studio官网下载 下载完成后双击 exe文
  • [实验三]LZW 编解码算法实现与分析

    目录 一 LZW算法 1 1 编码步骤 1 2 解码步骤 1 3 关于有可能出现当前码字CW不在词典中的情况说明 二 代码实现 2 1 程序说明 2 2 数据结构 2 3 bitio h 2 4 bitio c 2 5 lzw c 三 实验
  • VC++ FTP文件上传(断点续传)

    include
  • vue项目设置ip访问

    1 只用ip访问 打开config gt index 文件 host 172 16 1 95 新增host 改成IP地址 最后重新运行项目 2 既可以IP访问 由可以localhost访问 将config gt index 中host 该为
  • 嵌入式学习(第二周)

    目录 二 C语言基础 2 运算符和表达式 2 1 运算分类 2 2 算数运算符 2 3 关系运算符 2 4 逻辑运算符 2 5 条件运算符 2 6 位运算符 2 7 运算符的运用实例 3 程序结构和过程控制 3 1 C语言程序结构 3 2
  • 2021-03-30 maven

    1 maven父子工程 3 maven环境优化 1 修改web xml为最新的 2 将maven结构搭建完整 4 编写一个servlet Javaweb下载文件的头
  • Java日志简介及SpringBoot日志

    一 什么是日志 日志 就是介绍一个过程和经历的详细记录 项目日志 就是项目开发过程的详细记录 一般由项目经理记录 代码里的日志 就是程序员记录某个开发过程的详细情况 这是项目里每个程序员需要做的工作 日志和异常处理结合得当的话 会给项目维护
  • vue+element-ui 实现弹窗验证用户信息

  • C++零散易错点总结

    对日常做题中遇到的一些零散的易错点的总结 持续更新ing 1 string的length方法返回的是无符号数 当与负数比较时需要强制类型转换 否则会报错 1
  • appium+python自动化测试

    获取APP的包名 1 aapt即Android Asset Packaging Tool 在SDK的build tools目录下 该工具可以查看apk包名和launcherActivity 2 在android sdk里面双击SDK man
  • MYSQL8隐藏索引

    问题场景 我们知道 索引太多会导致UPDATE DELETE INSERT的时候 引擎需要更新索引信息 产生额外的开销 从而影响数据库性能 所以需要清理无效索引 但是表是数年前建的 索引基本都不是自己添加的 无法准确判定是否可以删除 万一删