广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >SQL性能优化方法及性能测试
  • 867
分享到

SQL性能优化方法及性能测试

2024-04-02 19:04:59 867人浏览 泡泡鱼
摘要

目录笛卡尔连接分页limit的sql优化的几种方法count 优化方案笛卡尔连接 例1: 没有携带on的条件字句,此条slq查询的结构集等价于,a表包含的条数*b表包含的乘积: se

笛卡尔连接

例1: 没有携带on的条件字句,此条slq查询的结构集等价于,a表包含的条数*b表包含的乘积:

select * from table a cross join table b;

例2:拥有携带on字句的sql,等价于inner join

select * from table a cross join table b on a.id=b.id;

分页limit的sql优化的几种方法

规则;表包含的数据较少的数据量,作为驱动表(小表驱动大表,一般Mysql的优化器会做出相应的优化的,但是为了防止一些抽风现象可以用STRAIGHT_JOIN,作用会强制使用左边的表作为驱动表)。

例1:

select * from table c straight_join table d on c.id=d.id;

覆盖索引:

select 主键字段或者创建过索引的字段 from table limit 300000,10

索引覆盖+inner (业界常用的优化方案)

select * from table a
inner join (
select 创建索引的字段 from table  limit 30000,10) b
on b.创建索引的字段=a.创建索引的字段 (也可以更换为 using (创建索引的字段))

索引覆盖+子查询 先获取分页起始的最小值,然后再获取后10条 (业界常用的优化方案)

select * from table
where 主键字段或者创建过索引的字段
                  >=
(select 主键字段或者创建过索引的字段 from table 300000,1)
limit 10;

范围查询+limit语句 获取上一页的主键最大值,然后进行获取后面的数据;

例1; 上一页的最大主键值为100

  select * from table
     where id > 100
     limit 10;

需要获取起始主键值和结束主键值

select * from table
          where id between 起始主键值 and 结束主键值;

禁止传入过大的页码 (例如;百度就是采用这种方式)

count 优化方案

实例1:

    
select count(*) from table

实例2:

    
select count(某个字段) from table 会把此字段的值为null过滤掉,仅仅只统计字段值不为null的

实例3:

    //做完本条查询,去执行count的操作
    select sql_calc_found_rows * from table limit 0,10;
    select found_rows() as count ;  通过此sql来获取count的结果(须在终端进行执行)

注意:缺点在mysql8.0.17这种用法已经被废弃,未来会被永久删除

实例4:优点不操作具体的表,无论表的数据量有多大,都可以迅速执行. 缺点:统计的是一个估算值,适合要求统计数的精度不是太高的场景。

    select * from infORMation_schema.TABLES
    where
       TABLE_SCHEMA='数据库名称'
    and
       TABLE_NAME ='表的名称';

实例5: //优点不操作具体的表,无论表的数据量有多大,都可以迅速执行. 缺点:统计的是一个估算值,适合要求统计数的精度不是太高的场景。

  show table status where NAME='表的名称隔行'

实例6: //优点不操作具体的表,无论表的数据量有多大,都可以迅速执行. 缺点:统计的是一个估算值,适合要求统计数的精度不是太高的场景。

 explain select * from table

实例7: 优化案例; 目前有一张数量非常大的表,需要统计id值大于100的有多少条

  • 一般写法:select count(*) from table where id>100;
  • mysql8.18版:逆向思维的写法: select count()-(select count() from table where id <100) from table
  • order by 的优化:原则利用索引,避免排序
 //first_name,last_name已经在表里创建了组合索引,emp_no为主键;

实例1:

//此sql是不能利用到索引的,原因是:mysql的优化器,是根据成本计算的,如果全表扫描比使用索引,成本更低时会使用全表扫描
//如何鉴定是否使用索引避免了排序呢? 通过explain 查看sql的性能如果Extra的值为null时,说明是可以通过索引避免排序的.如果Extra的值是Using filesort 是不可以进行索引排序的
select * from table order by first_name,last_name;
//此sql可以使用索引避免排序的
select * from table order by first_name,last_name limit 10;
//此sql可以使用索引避免排序的

select * from table where fist_name='Bader' order by last_name;
//此sql可以使用索引避免排序的

select * from table where fist_name<'Bader' order by last_name
//此sql可以使用索引避免排序的
 select * from table where fist_name='Bader' and last_name>'Peng' order by last_name
 //此sql可以使用索引避免排序的,原因排序的俩个字段,分别存在俩个索引中
 select * from table  order by first_name,emp_no;

索引失效的场景:

  • 1: join 字段的类型不一致
  • 2: 在=号的左边,进行加减操作

实例1:

     select * from employees e
     left join dept_emp de on e.emp_no=de.emp_no
     left join departments d on de.dept_no=d.dept_no
     where e.emp_no=1001;

拆分后:

    select * from employees where emp_no='1001';
    select * from dept_emp where emp_no='1001';
    select * from departments where dept_no='d005';

表的设计原则-三范式:

  • 范式:表的字段都是原子性,既每个表的字段都是不可分割的,不是集合,数组,记录等非原子数据项。
  • 范式:在第一范式的基础上,每一行数据的唯一性,非主键字段要完全依赖于主键字段。
  • 范式:在满足第二范式的基础上,不能存在传递依赖。

到此这篇关于SQL性能优化方法及性能测试的文章就介绍到这了,更多相关SQL性能优化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SQL性能优化方法及性能测试

本文链接: https://www.lsjlt.com/news/148850.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL性能优化方法及性能测试
    目录笛卡尔连接分页limit的sql优化的几种方法count 优化方案笛卡尔连接 例1: 没有携带on的条件字句,此条slq查询的结构集等价于,a表包含的条数*b表包含的乘积: se...
    99+
    2022-11-13
  • PHP中封装性的性能测试与优化方法
    摘要:在PHP开发中,封装性的重要性不言而喻。好的封装性可以提高代码的可读性、维护性和复用性。然而,过于复杂的封装可能会导致性能问题。本文将介绍一些测试和优化方法,帮助你确保封装性和性能的平衡。性能测试工具在进行性能测试之前,我们需要一个可...
    99+
    2023-10-21
    PHP性能测试 性能测试与优化 封装性能优化
  • sql 性能优化
    性能优化 全表扫描(多块读的size)数据量比较多的时候 1,并行查询 2,多块读 3,索引全扫描 row ID  索引就是一个数据库对象,包含 k值和row id的新表。 OLTP...
    99+
    2022-10-18
  • Oracle 性能优化 之 游标及 SQL
    一、游标 我们要先说一下游标这个概念。       从 Oracle 数据库管理员...
    99+
    2022-10-18
  • Android性能优化以及数据优化方法
    Android性能优化-布局优化 今天,继续Android性能优化 一 编码细节优化。 编码细节,对于程序的运行效率也是有很多的影响的。今天这篇主题由于技术能力有限,...
    99+
    2022-06-06
    方法 数据 优化 Android
  • Android性能优化及性能优化工具
    目录1.Allaction Tracking(1)追踪(2)分类我们的内存分配(3)查看统计图2.LeakCanary(1)配置(2)制造一个单例内存泄漏的点(3)LeakCanar...
    99+
    2022-11-12
  • 如何做SQL Server性能测试?
    对于DBA来讲,我们都会做新服务器的性能测试。我会从TPC的基准测试入手,使用HammerDB做整体性能评估(前身是HammerOra),跟厂商数据对比。再使用DiskSpd针对性的测试磁盘IO性能指标(前...
    99+
    2022-10-18
  • 如何优化shell性能测试脚本
    如何优化shell性能测试脚本?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。脚本名称:authTest.sh#!/bin/bashfor ((i=0;i<=10...
    99+
    2023-06-09
  • Oracle SQL性能优化的方法有哪些
    本篇内容主要讲解“Oracle SQL性能优化的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle SQL性能优化的方法有哪些”吧!1. SQ...
    99+
    2022-10-19
  • Android性能优化方法
    GPU过度绘制  •打开开发者选型,“调试GPU过度绘制”,蓝、绿、粉红、红,过度绘制依次加深  •粉红色尽量优化,界面尽量保持蓝绿...
    99+
    2022-06-06
    方法 优化 Android
  • Mysql性能有哪些调优与测试的方法
    本文主要给大家介绍Mysql性能有哪些调优与测试的方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下Mysql性能有哪些调优与测试的方法吧。一、关键...
    99+
    2022-10-18
  • shell性能测试脚本优化的技巧
    最初脚本 脚本名称:authTest.sh(备注:这个开发给过来的测试脚本,我们作为测试要检查一下) #!/bin/bash for ((i=0;i<=1000;i++)) do sh /usr/local/...
    99+
    2022-06-04
    shell性能测试 shell脚本优化
  • SQL Server数据库的高性能优化方法
    本篇内容介绍了“SQL Server数据库的高性能优化方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 如何在Python中进行代码性能优化和性能测试
    如何在Python中进行代码性能优化和性能测试引言:当我们编写代码时,经常会面临代码执行速度慢的问题。对于一个复杂的程序来说,效率的提升可以带来明显的性能提升。本文将介绍如何在Python中进行代码性能优化和性能测试,并给出具体的代码示例。...
    99+
    2023-10-22
    性能 (Performance) 优化 (Optimize) 测试 (Test)
  • 性能优化指南:性能优化的一般性原则与方法
    【本文转自博客园 作者:xybaby 原文链接:https://www.cnblogs.com/xybaby/p/9055734.html】作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应...
    99+
    2023-06-05
  • Pythonflask与fastapi性能测试方法介绍
    目录背景apache ab介绍测试计划测试代码测试结果结论背景 sy项目通过MQ接受业务系统的业务数据,通过运行开发者开发的python脚本执行业务系统与财务系统数据的一致性校验。 ...
    99+
    2022-12-09
    Python flask与fastapi Python flask与fastapi性能测试
  • kafka性能测试的方法有哪些
    Kafka性能测试的方法有以下几种:1. 基准测试(Benchmarking):使用kafka-producer-perf-test...
    99+
    2023-10-20
    kafka
  • C#中如何使用性能测试工具和性能优化技巧
    C#中如何使用性能测试工具和性能优化技巧,需要具体代码示例性能优化在软件开发过程中起着非常重要的作用,它可以提高系统的性能、运行速度和响应能力。C#是一种高性能的编程语言,也有许多性能优化技巧和工具可以帮助我们更好地利用C#的优势。本文将介...
    99+
    2023-10-22
    性能优化技巧 C#性能测试工具
  • Nginx性能优化的方法
    这篇文章主要介绍了Nginx性能优化的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nginx性能优化的方法文章都会有所收获,下面我们一起来看看吧。Linux系统参数优化下文中提到的一些配置,需要较新的Li...
    99+
    2023-06-27
  • CPU计算性能speccpu2006的测试方法及工具下载
    CPU计算性能speccpu2006的测试方法及工具下载 简介测试原理目录结构测试方法基准测试项解析测试结果常见问题FAQ 简介 SPEC CPU2006是SPEC组织推出的CPU子系统评...
    99+
    2023-09-05
    speccpu linux 性能测试 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作