首页 > 其他分享 >测试

测试

时间:2024-08-21 16:15:01浏览次数:9  
标签:index eqp create 索引 测试 type id

场景

不废话直接建表:

create table t_log
(
    id                 bigint auto_increment comment '主键id'
        primary key,
    user_id            bigint                                 null comment '用户ID',
    eqp_number         varchar(255)                           null comment '设备号',
    type               char         default '1'               null comment '日志类型 0离线 1上线',
    title              varchar(255) default ''                null comment '日志标题',
    remote_addr        varchar(255)                           null comment '操作IP地址',
    current_project_id bigint                                 not null comment '当前项目ID',
    root_project_id    bigint                                 not null comment '根项目ID',
    create_time        datetime     default CURRENT_TIMESTAMP null comment '创建时间',
    eqp_name           varchar(50)                            null comment '设备名称',
    eqp_model          varchar(50)                            null comment '设备型号',
    eqp_major_type     varchar(5)                             null comment '设备大类1:微断主机;2';

)
    comment '日志' row_format = DYNAMIC;

现在有一个需求是需要根据项目类型(eqp_major_type) 和当前项目id(current_project_id)去查询且需要按着创建时间排序以10个分页。

OK

SELECT a.current_project_id AS projectId, a.eqp_name, a.eqp_model, a.eqp_number, a.type, a.create_time
FROM t_eqp_log a
WHERE a.current_project_id in (176)
and a.eqp_major_type = 1
order by a.create_time desc
LIMIT 10;

easy啊。

时间久了数据量变大 查询变慢了,leader: 那个谁,你去把这个接口sql优化一下

你看都没看直接加上索引

create index t_eqp_log_create_time_index
    on t_eqp_log (create_time);

create index t_eqp_log_current_project_id_index
    on t_eqp_log (current_project_id);

create index t_eqp_log_eqp_major_type_index
    on t_eqp_log (eqp_major_type);

条件字段都加上不就得了吗

但是image-20240820142410449

目标索引只有createtime被击中, 其他两个字段都没生效,

不对劲啊 (开始Google GPT

image-20240820143102009

一句话总结就是说mysql优化器认为通过create_time索引效率更高,也就是三个字段都没有索引的情况,create_time字段查询的成本会更高,so嘎 那怎么解决呢。很简单啊 直接联合索引啊

create index t_eqp_log_current_project_id_eqp_major_type_create_time_index
    on t_eqp_log (create_time, current_project_id, eqp_major_type);

再次执行一下 不出意外就要出意外了 果然又没生效

分析分析再分析

image-20240820143959485

怎么这行sql越看越不对劲呢。淦 eqp_major_type是string类型的 也就是 eqp_major_type = 1 是存在一个强转的过程

强转就会导致联合索引失效 服了 继续再来

image-20240820152013252

等会 有点对劲啊 赶紧看看文档

image-20240820152255452

官方文档这大一堆 总结就一句话。index是全索引扫描 效率不如range 且重点:

性能从最好到最差:null > system > const > eq_ref > ref > range > index > all

继续看看extra

image-20240820153025707

image-20240821103523425总结一下就是说这次执行情况为:index 类型意味着 MySQL 使用了全索引扫描,尽管联合索引被使用,但可能在过滤上不如 range 类型有效。Backward index scan 表示它在倒序扫描整个索引,这种扫描方式效率相对低。

这时候突然有灵感,既然选择了联合查询肯定要考虑最左前导列原则啊,create_time作为第一导列 但是where条件却没有,也就是没法用它很好的利用where条件来过滤大部分数据,自然会选择全索引扫描 赶紧试试验证一下

image-20240820154917360

h h h 果然皇天不负

标签:index,eqp,create,索引,测试,type,id
From: https://www.cnblogs.com/mondayishard/p/18371914

相关文章

  • 从黑神话悟空测试程序谈显卡参数和优化办法
    《黑神话:悟空》刚刚发布的「性能测试工具」(已在STEAM商店开放免费下载),借此我们来回顾一下显卡的各种参数意义和调优方式NVIDIA英伟达是最主流的显卡品牌,这个不多说了。AMD超威半导体公司(英语:AdvancedMicroDevices,Inc.;简称:AMD),成立于1969年,是一家美国半导体跨国公司,总部位于美国......
  • 零基础测试入门记录(一)
    1.测试的流程:第一步需求评审:就是前端、后端、产品、测试开个会议。确保大家对于即将开发的模块的需求理解一致,有问题就提出来。第二步写测试计划:测试组长来写。说明:指导测试执行的文档(重要)测什么(目标、范围)谁来测(人员进度及安排)怎么测(测试工具、测试策略)第......
  • 模糊测试技术与高效模糊测试策略设计(第一篇)
    一、概述模糊测试(Fuzzing)是一种自动化测试技术,通过向目标软件输入大量随机或异常数据来发现潜在的安全漏洞。这种技术在软件安全研究中至关重要,尤其适用于发现未知漏洞。本文将详细讲解如何使用模糊测试工具,以及如何设计和实施高效的模糊测试策略。二、模糊测试的基本原理1.......
  • 模糊测试结果分析与漏洞利用开发(第二篇)
    一、概述模糊测试的最终目的是发现并利用软件中的安全漏洞。在第一篇文章中,我们讲解了如何设计高效的模糊测试策略。本文将进一步深入,探讨如何分析模糊测试的结果,确认漏洞的存在,并开发相应的漏洞利用工具。二、崩溃样本的分类与分析1.崩溃样本的初步分类模糊测试通常会生......
  • 什么是静态应用程序安全测试 (SAST)?
    静态应用程序安全测试(SAST)是分析和测试应用程序源代码是否存在安全漏洞的过程。软件开发人员使用SAST在软件开发生命周期(SDLC)早期(即应用最终发布之前)查找并修复源代码中的缺陷。SAST的工作原理是什么?SAST是一种白盒测试方法,通过直接面向源代码、字节码和二进制文件,检......
  • 山东大学计算机导论与程序设计基础限时测试三/作业三
    A:旋转数组题目描述给你一个数组nums。nums存在一个源数组originnums,其所有元素与nums相同,但按非递减顺序排列。如果nums能够由源数组轮转若干位置(包括0个位置)得到,则输出Yes;否则,输出No。源数组中可能存在重复项。注意:我们称数组A在轮转x个位置后......
  • 我们是如何测试数百个页面的
    自动化测试是确保软件质量和提供良好用户体验的有效方式。在Woovi,我们拥有数千个页面,用户与我们的第一次接触通常会通过这些展示我们产品的页面。因此,我们需要确保每个页面都能正常运行。每一个访问我们页面的用户都代表着一个新的潜在客户。测试页面的挑战Woovi的页面仅展示......
  • 自动对焦指标测试
    1、对焦成功率测试1.1、测试目的本测试旨在测量一键对焦系统的对焦成功几率。为了评估这些措施,应对最终确定的图像进行多次测量并进行比较。1.2、测试设备内窥摄像系统、灯箱、专用固定支架、多种测试卡(包括SFRplus,eSFR-ISO和新的AutoFocus测试卡)、显示屏1.3、测试软件无1.4、测......
  • 大型语言模型基准测试(LLM Benchmarks):理解语言模型性能
    我们今天来看一下大模型的基准测试,现在很多主流大模型,比如GPT-4、Claude3和GeminiUltra等,对于大模型的测试,因其多功能性和非确定性特性,使得评估它们的性能成为一个挑战。LLM的基准测试提供了一种标准化和严谨的框架,用于衡量这些模型在核心语言处理任务上的表现。理解这些基准......
  • 大模型备案流程最详细说明【评估测试题+附件】
    2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称《AIGC安全要求》),这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件,对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面提出了具体规范和要求。(一)适用主体《AIGC安全要求》的适用主......