读SQL进阶教程笔记16_SQL优化让SQL飞起来

Oracle 性能优化之高消耗的SQL 高资源消耗的 SQL与用户执行 SQL 有关的动态视图有 v$sql、v$sqlarea、v$sqltext、v$sql_plan、 v$sqlstats 等。v$sql 中包含了所有用户执行的所有 SQL 信息,不同用户、不同会 话执行相同 SQL 的语义、执行计划可能会不同,这些 SQL 字面值相同(具有相同 的 sql_id),通过不同的 child_number 来区分。v$sqlarea 阅读详情

1. 查询速度慢并不只是因为SQL语句本身,还可能是因为内存分配不佳、文件结构不合理等其他原因

1.1. 都是为了减少对硬盘的访问

2. 不同代码能够得出相同结果

2.1. 从理论上来说,得到相同结果的不同代码应该有相同的性能

2.2. 遗憾的是,查询优化器生成的执行计划很大程度上要受到代码外部结构的影响

2.3. 如果想优化查询性能,必须知道如何写代码才能使优化器的执行效率更高

3. 使用高效的查询

3.1. 参数是子查询时,使用EXISTS代替IN

  • 3.1.1. IN谓词却有成为性能优化的瓶颈的危险

    • 3.1.1.1. 当IN的参数是子查询时,数据库首先会执行子查询,然后将结果存储在一张临时的工作表里(内联视图),然后扫描整个视图

    • 3.1.1.2. 从代码的可读性上来看,IN要比EXISTS好

  • 3.1.2. 示例

    • 3.1.2.1.
  --慢

    SELECT *
      FROM Class_A
     WHERE id IN (SELECT id
                    FROM Class_B);
    --快
    SELECT *
      FROM Class_A  A
     WHERE EXISTS
            (SELECT *
              FROM Class_B  B
              WHERE A.id = B.id);
>  3.1.2.1.1. 如果连接列(id)上建立了索引,那么查询Class_B时不用查实际的表,只需查索引就可以了

>  3.1.2.1.2. 如果使用EXISTS,那么只要查到一行数据满足条件就会终止查询,不用像使用IN时一样扫描全表

  >   3.1.2.1.2.1. 在这一点上NOT EXISTS也一样

>  3.1.2.1.3. 使用EXISTS的话,数据库不会生成临时的工作表

3.2. 参数是子查询时,使用连接代替IN

  • 3.2.1. 示例

    • 3.2.1.1. --使用连接代替IN
    SELECT A.id, A.name
      FROM Class_A A INNER JOIN Class_B B
        ON A.id = B.id;
>  3.2.1.1.1. 至少能用到一张表的“id”列上的索引

>  3.2.1.1.2. 没有了子查询,所以数据库也不会生成中间表

>  3.2.1.1.3. 如果没有索引,那么与连接相比,可能EXISTS会略胜一筹

4. 避免排序

4.1. 在SQL语言中,用户不能显式地命令数据库进行排序操作

4.2. 对用户隐藏这样的操作正是SQL的设计思想

4.3. 在数据库内部频繁地进行着暗中的排序

  • 4.3.1. 会进行排序的代表性的运算

    • 4.3.1.1. GROUP BY子句

    • 4.3.1.2. ORDER BY子句

    • 4.3.1.3. 聚合函数(SUM、COUNT、AVG、MAX、MIN)

    • 4.3.1.4. DISTINCT

    • 4.3.1.5. 集合运算符(UNION、INTERSECT、EXCEPT)

    • 4.3.1.6. 窗口函数(RANK、ROW_NUMBER等)

4.4. 灵活使用集合运算符的ALL可选项

  • 4.4.1. 如果不在乎结果中是否有重复数据,或者事先知道不会有重复数据,请使用UNION ALL代替UNION

  • 4.4.2. 加上ALL可选项是优化性能的一个非常有效的手段

  • 4.4.3. 对于INTERSECT和EXCEPT也是一样的,加上ALL可选项后就不会进行排序了

4.5. 使用EXISTS代替DISTINCT

  • 4.5.1. 为了排除重复数据,DISTINCT也会进行排序

    • 4.5.1.1.
 SELECT I.item_no

      FROM Items I INNER JOIN SalesHistory SH
        ON I. item_no = SH. item_no;
  • 4.5.1.2.
  SELECT DISTINCT I.item_no

      FROM Items I INNER JOIN SalesHistory SH
        ON I. item_no = SH. item_no;
  • 4.5.1.3.
SELECT item_no

      FROM Items I
     WHERE EXISTS
              (SELECT *
                  FROM SalesHistory SH
                WHERE I.item_no = SH.item_no);

4.6. 在极值函数中使用索引(MAX/MIN)

  • 4.6.1. 使用这两个函数时都会进行排序

    • 4.6.1.1. --这样写需要扫描全表
    SELECT MAX(item)
      FROM Items;
  • 4.6.2. 如果参数字段上建有索引,则只需要扫描索引,不需要扫描整张表

    • 4.6.2.1. --这样写能用到索引
    SELECT MAX(item_no)
      FROM Items;
  • 4.6.3. 对于联合索引,只要查询条件是联合索引的第一个字段,索引就是有效的

  • 4.6.4. 这种方法并不是去掉了排序这一过程,而是优化了排序前的查找速度,从而减弱排序对整体性能的影响

4.7. 能写在WHERE子句里的条件不要写在HAVING子句里

  • 4.7.1. --聚合后使用HAVING子句过滤
    SELECT sale_date, SUM(quantity)
      FROM SalesHistory
     GROUP BY sale_date
    HAVING sale_date = '2007-10-01';
  • 4.7.2. --聚合前使用WHERE子句过滤
    SELECT sale_date, SUM(quantity)
      FROM SalesHistory
     WHERE sale_date = '2007-10-01'
     GROUP BY sale_date;
  • 4.7.2.1. 在使用GROUP BY子句聚合时会进行排序,如果事先通过WHERE子句筛选出一部分行,就能够减轻排序的负担

  • 4.7.2.2. 第二个是在WHERE子句的条件里可以使用索引。HAVING子句是针对聚合后生成的视图进行筛选的,但是很多时候聚合后的视图都没有继承原表的索引结构

4.8. 在GROUP BY子句和ORDER BY子句中使用索引

  • 4.8.1. 通过指定带索引的列作为GROUP BY和ORDER BY的列,可以实现高速查询

  • 4.8.2. 在一些数据库中,如果操作对象的列上建立的是唯一索引,那么排序过程本身都会被省略掉

5. 真正用到索引!

5.1. 在索引字段上进行运算

  • 5.1.1.
SELECT *

      FROM SomeTable
     WHERE col_1 * 1.1 > 100;

5.2. 把运算的表达式放到查询条件的右侧,就能用到索引了

  • 5.2.1. WHERE col_1 > 100 / 1.1

5.3. 在查询条件的左侧使用函数时,也不能用到索引

  • 5.3.1.
SELECT *

      FROM SomeTable
     WHERE SUBSTR(col_1, 1, 1) = 'a';

5.4. 如果无法避免在左侧进行运算,那么使用函数索引也是一种办法

5.5. 使用索引时,条件表达式的左侧应该是原始字段

5.6. 使用IS NULL谓词

  • 5.6.1. 索引字段是不存在NULL的,所以指定IS NULL和IS NOT NULL的话会使得索引无法使用,进而导致查询性能低下

    • 5.6.1.1.
SELECT *

      FROM  SomeTable
     WHERE  col_1 IS NULL;
  • 5.6.1.2. --IS NOT NULL的代替方案
    SELECT *
      FROM  SomeTable
     WHERE  col_1 > 0;
>  5.6.1.2.1. 如果要选择“非NULL的行”,正确的做法还是使用IS NOT NULL

5.7. 使用否定形式

  • 5.7.1. 否定形式不能用到索引

    • 5.7.1.1. <>

    • 5.7.1.2. ! =

    • 5.7.1.3. NOT IN

5.8. 使用OR

  • 5.8.1. 在col_1和col_2上分别建立了不同的索引,或者建立了(col_1, col_2)这样的联合索引时,如果使用OR连接条件,那么要么用不到索引,要么用到了但是效率比AND要差很多

  • 5.8.2. 如果无论如何都要使用OR,那么有一种办法是位图索引。但是这种索引的话更新数据时的性能开销会增大

5.9. 使用联合索引时,列的顺序错误

  • 5.9.1. 假设存在这样顺序的一个联合索引“col_1, col_2, col_3”

  • 5.9.2.

 ○   SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 AND col_3 = 500;

    ○   SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 ;
    ×   SELECT * FROM SomeTable WHERE col_1 = 10 AND col_3 = 500 ;
    ×   SELECT * FROM SomeTable WHERE col_2 = 100 AND col_3 = 500 ;
    ×   SELECT * FROM SomeTable WHERE col_2 = 100 AND col_1 = 10 ;
  • 5.9.3. 联合索引中的第一列(col_1)必须写在查询条件的开头,而且索引中列的顺序不能颠倒

  • 5.9.4. 有些数据库里顺序颠倒后也能使用索引,但是性能还是比顺序正确时差一些

  • 5.9.5. 如果无法保证查询条件里列的顺序与索引一致,可以考虑将联合索引拆分为多个索引

5.10. 使用LIKE谓词进行后方一致或中间一致的匹配

  • 5.10.1. 只有前方一致的匹配才能用到索引

  • 5.10.2.

 ×   SELECT  *   FROM  SomeTable  WHERE  col_1  LIKE '%a';

    ×   SELECT  *   FROM  SomeTable  WHERE  col_1  LIKE '%a%';
    ○   SELECT  *   FROM  SomeTable  WHERE  col_1  LIKE 'a%';

5.11. 进行默认的类型转换

  • 5.11.1. 默认的类型转换不仅会增加额外的性能开销,还会导致索引不可用

  • 5.11.2. 在需要类型转换时显式地进行类型转换

6. 减少中间表

6.1. 子查询的结果会被看成一张新表,这张新表与原始表一样,可以通过代码进行操作

6.2. 灵活使用HAVING子句

  • 6.2.1. 对聚合结果指定筛选条件时不需要专门生成中间表

  • 6.2.2.

 SELECT sale_date, MAX(quantity)

      FROM SalesHistory
     GROUP BY sale_date
    HAVING MAX(quantity) >= 10;
  • 6.2.3. HAVING子句和聚合操作是同时执行的,所以比起生成中间表后再执行的WHERE子句,效率会更高一些,而且代码看起来也更简洁

6.3. 需要对多个字段使用IN谓词时,将它们汇总到一处

  • 6.3.1.
SELECT id, state, city

      FROM Addresses1 A1
     WHERE state IN (SELECT state
                      FROM Addresses2 A2
                      WHERE A1.id = A2.id)
      AND city  IN (SELECT city
                      FROM Addresses2 A2
                      WHERE A1.id = A2.id);
  • 6.3.2.
SELECT *

      FROM Addresses1 A1
     WHERE id || state || city
        IN (SELECT id || state|| city
              FROM Addresses2 A2);
  • 6.3.2.1. 子查询不用考虑关联性,而且只执行一次就可以

  • 6.3.3.

SELECT *

      FROM Addresses1 A1
     WHERE (id, state, city)
        IN (SELECT id, state, city
              FROM Addresses2 A2);
  • 6.3.3.1. 不用担心连接字段时出现的类型转换问题

  • 6.3.3.2. 不会对字段进行加工,因此可以使用索引

6.4. 先进行连接再进行聚合

  • 6.4.1. 连接和聚合同时使用时,先进行连接操作可以避免产生中间表

    • 6.4.1.1. 连接做的是“乘法运算”

    • 6.4.1.2. 连接表双方是一对一、一对多的关系时,连接运算后数据的行数不会增加

6.5. 合理地使用视图

  • 6.5.1. 特别是视图的定义语句中包含以下运算的时候,SQL会非常低效,执行速度也会变得非常慢

    • 6.5.1.1. 聚合函数(AVG、COUNT、SUM、MIN、MAX)

    • 6.5.1.2. 集合运算符(UNION、INTERSECT、EXCEPT等)

  • 6.5.2. 物化视图(materialized view)等技术。当视图的定义变得复杂时,可以考虑使用一下

【第16天】MYSQL进阶-查询优化一定要学EXPALIN (SQL 小虚竹) 学会EXPALIN 阅读详情

相关推荐

初识数据结构之入门必懂——线性表(顺序表)

本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表

m0_64705485的博客 905

SQL进阶教程读后总结与感想

以前我是用过程(命令)式思维去看这个世界,到后来我才明白也可以用集合论或者函数式思维去看这个世界。套用大话西游的台词“以前我是用肉眼去看这个世界,到后来我才明白应该用心去看这个世界。查不出,查不快,很可能就是null这个幽灵在作祟,你又无法根除它,只能时刻保持警惕。另外,原书练习题和第三章附录答案等,也很有意思,有兴趣的同学可以找来做做。书到用时方恨少,读了之后,发现SQL还可以这么玩,果然牛掰!所以,近一段时间,阅读函数式编程和SQL编程的书籍较多。两者很像,都不同于过程(命令)式。SQL解惑(第2版)

lyingSeven的博客 1266

Windows 11 的C盘User(用户)文件夹下的用户文件夹名称的修改

背景介绍:由于系统重装导致Windows 11的系统用户名与C盘User(用户)文件夹下的用户名文件夹(公用文件夹旁边的文件夹)出现名称不一致,事例中系统用户名命名为“寂萧”,User(用户)文件夹下的文件夹名称却是“77555”。【QQ邮箱前五位真的真的看着很别扭】注:改名有风险,三思而后行。User(用户)文件夹下的用户名是中文在某些软件的应用场景下产生不便,导致很多软件莫名其妙报错,甚至无法使用,笔者不建议修改为中文名。//和笔者一样的强迫症除外//

2302_79084172的博客 10万+

菜鸟的mysql高级进阶以及mysql数据库优化

菜鸟的mysql进阶说明一、mysql的存储引擎二、事务的ACID原则三、数据库设计的三大范式 说明 一直想学习一下mysql进阶的相关知识,刚好趁着前段时间redis学完,可以学习一下mysql的进阶,简单了解了一下进阶的相关知识,还挺多的,感觉之前的mysql学的好像只是简单入门而已。本文会持续更新,不断地扩充 本文仅为记录学习轨迹,如有侵权,联系删除 一、mysql的存储引擎 引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水

最强菜鸟 5431

PROFINET非周期数据通信实战:从报文解析到参数读写

本文详细解析了PROFINET非周期数据通信的实战应用,从报文结构到参数读写全流程。通过西门子PLC与驱动器的配置案例,深入讲解非周期通信在工业自动化中的关键作用,包括硬件选型、软件配置及常见问题排查,帮助工程师高效实现设备参数配置与诊断。

weixin_42522953的博客 514

dpdk 源码分析 rte_ring

rte_ring源码分析

qq_40843445的博客 929

SQL 优化技术精要:让查询飞起来

SQL查询优化指南摘要 本文介绍了优化SQL查询性能的5个关键技术: 只选择必要列,避免使用SELECT *,减少I/O和网络开销,提高缓存效率。 使用SARGable查询:避免在WHERE子句中对列使用函数,确保查询可以利用索引。 避免前导通配符:LIKE '%term'会阻止索引使用,应优先使用前缀匹配。 理解执行计划:通过EXPLAIN分析查询执行方式,识别全表扫描等问题。 优化索引策略:合理设计复合索引,注意列顺序的最左前缀原则。 这些方法能显著提升查询速度,将耗时操作转化为高效执行。

jinahong101的博客 1565

Windows 2012 SYSVOL复制失败的处理

题外话:晓原理、知架构、查日志是排错的三件法宝今天在DC1上新建并链接了一个组策略对像,在客户端刷新时,却报下面的错误:“处理组策略失败。Windows无法应用组策略对象LDAP….”如下图所示:于是在客户端用\\domain.com访问,发现\\domain.com\SYSVOL\domain.com\policies下面没有上面报错的组策略对象。这是怎么一回事呢,pin...

weixin_33989780的博客 1669

MySQL进阶篇2-SQL优化、锁

本文介绍了SQL语句的性能优化方法,主要包括插入数据优化、主键优化、order by优化、group by优化和limit优化。在插入数据时,建议采用批量插入、手动提交事务和主键顺序插入,以提高效率。主键优化部分解释了页分裂和页合并的概念,并提出了主键设计原则。order by优化建议尽量使用索引排序,避免使用filesort。group by优化强调遵循最左前缀原则,避免使用临时表。limit优化则建议通过连表查询等方式减少数据扫描量。通过这些优化措施,可以有效提升SQL查询的性能。

y_k_j_c的博客 990

2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

小杨购物 【题目描述】 小杨有n元钱用于购物。商品A的单价是a元,商品B的单价是b元。 小杨想购买相同数量的商品A和商品B。 默认小猫角色和白色背景,编写程序请你帮小杨计算出他最多能够购买多少个商品A和商品B。 【输入描述】 新建变量“n”用于存储小杨购物的金额。 新建变量“a”用于存储商品A的价格。 新建变量“b”用于存储商品B的价格。 1≤n,a,b≤100000 如下图所示: 图片 【输出描述】 新建变量“result”用于存储小杨最多购买商品A和商品B的个数。 如下图所示:

人生就是一个不断学习的过程 497

基于 YOLO26 的车辆实时检测与计数系统

本文提出了一种基于YOLO26的车辆实时检测与计数系统。系统采用CSPDarknet53作为主干网络,结合特征金字塔和多尺度预测实现高精度车辆检测。通过DeepSORT算法进行目标跟踪,并统计车辆数量、行驶方向和交通流量。实验表明,该系统在保持实时性能的同时,检测精度达到92.3%,可有效应用于智能交通管理。系统采用Python实现,支持GPU加速,适用于多种交通场景下的车辆监测需求。

一键难忘的博客 909

SQL优化——访问路径(ACCESS PATH)

常见的访问路径(扫描方式)、单块读与多块读、DML对于索引维护的影响

码说芯语的博客 1276

【目标检测】IoU(交并比)详解及代码实现

1. IOU概述        IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。 2. IoU计算        IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实

Roaddd的博客 2万+

【MySQL进阶】SQL优化

本文主要讲解了sql语句的优化,包括insert、order by、group by、limit、count、update、以及主键优化。

Yinin.的博客 981

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

工作实战: 让 SQL 飞起来

工作实战: 让 SQL 飞起来 1 使用高效的查询 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for class_a -- ---------------------------- DROP TABLE IF EXISTS `class_a`; CREATE TABLE `class...

炫的博客 9927

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Mysql进阶-SQL优化篇

在分组操作中,我们需要通过以下两点进行优化,以提升性能:A. 在分组操作时,可以通过索引来提高效率。B. 分组操作时,索引的使用也是满足最左前缀法则的。

weixin_64133130的博客 806

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Oracle数据库SQL优化详解

Oracle数据库SQL优化1. Oracle SQL优化概述2. Oracle SQL优化详解2.1 Oracle 查询阻塞2.2 Oracle 查询耗时 SQL2.3.Oracle 查看执行计划2.4.Oracle 查看收集统计信息2.5.Oracle 查询优化器 -- 改写查询语句2.6.Oracle 查询优化器 -- 访问路径2.7.Oracle 查询优化器 -- 表连接方法2.8.Oracle 索引2.9.Oracle 视图2.10.Oracle 减少数据库访问次数2.11 Oracle 面向对象

靖节先生的博客 1万+

sql进阶

文章目录一、锁1.全局锁2.表锁1.表锁2.元数据锁3.意向锁(我们使用select ... lock in share mode后,加表锁共享锁不会阻塞)3.行锁4.意向锁和表锁的关系二、innoDB1.逻辑存储结构2.内存结构3.磁盘结构(存放一个个idb文件的文件夹)4.线程5.事务原理1.特性:2.redolog3.undolog4.当前读和快照读5.MMVC三、索引1.索引结构2.B+Tree3.hash4.索引术语解析5.sql性能分析1.SQL执行频率2.慢查询日志3.profile4.exp

qq_48247261的博客 1699

MySQL进阶- SQL优化和视图

limit一个常见的问题就是,在大数据量的情况下,越往后查询数据,limit的效率月底,例如limit 2000000,10,此时需要mysql排序前2000010记录,但是仅仅返回2000000和2000010之间的记录,其他的记录丢弃,查询排序的代价非常大。页可以为空,也可以填充一半,也可以全部填满,但是一个页中最少包含2行数据,如果某行的数据较大,超出了页的阈值之后,就会出现行溢出的现象,如果顺序插入,就不会出现页分裂,乱序插入就会出现页分裂的现象,导致插入时要多操作页,自然插入的时间就会变长。

qq_72343101的博客 1964

第16章 SQL优化实战笔记:电商订单系统性能提升

先开启慢日志:找到真正的性能瓶颈,不要凭空猜测索引设计原则联合索引遵循最左前缀原则业务查询条件和排序字段放在前面单表索引不超过5个,单个索引字段不超过5列SQL优化要点避免SELECT *优化深度分页(延迟关联)用覆盖索引代替回表查询避免WHERE中使用函数适当使用COUNT(1)替代COUNT(*)

weixin_66095070的博客 1152

数据库进阶 SQL优化

没有not null 约束 : InnoDB 引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为null,计数累加。对于以上的两种排序方式,Using index的性能高,而Using filesort的性能低,我们在优化排序操作时,尽量要优化为 Using index。当主键乱序插入时,新增一行数据要插入时,可能不会正常新开一页插入,容易产生页分裂,此时,需要重新设置链表指针,比较耗费性能。服务层对于返回的每一行,放一个数字“1”进去,直接按行进行累加。...

weixin_53115476的博客 346

限时删,收获不止SOL优化抓住SQL的本质——阿里P9整理出超全SQL笔记

前言: 有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括:“"广"。加之其简单易学,SQL实现也可一字概括:“乐”。 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。 缘何有性能问题?原因也可以用一字一个也可以用一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖垮整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以用一字概括:“懵”。 .

JavaJIAMIN的博客 1266

【MYSQL进阶篇】详细版MYSQL优化 SQL优化、主键优化、ORDER BY优化、GROUP BY优化、COUNT优化、UPDATE优化

如果数据量很大,在执行count操作时,是非常耗时的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;但是如果是带条件的count,MyISAM也慢。InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数主要的优化思路:自己计数(可以借助于redis这样的数据库进行,但是如果是带条件的count又比较麻烦了)。

2301_77358195的博客 1651

MySQL SQL优化十大实战技巧:让数据库飞起来

主要介绍Mysql优化技巧,有例子说明

qq_45438032的博客 1461

SQL进阶之旅 Day 16:特定数据库引擎高级特性

今天我们学习了MySQL、PostgreSQL和Oracle的高级特性及其应用场景。这些功能不仅解决了特定场景下的技术难题,还为后续性能优化奠定了基础。下一天的内容预告:Day 17——大数据量查询优化策略。掌握MySQL JSON字段的操作方法。学会使用PostgreSQL分区表提升查询性能。理解Oracle物化视图的工作机制。能够根据业务需求选择合适的数据库高级特性。

在未来等你的专栏 1152

【SQL】MySQL进阶2:优化

介绍MySQL优化实践

backlash321的博客 1154
上一篇: 学系统集成项目管理工程师(中项)系列21b_整体管理(下)
下一篇: 学系统集成项目管理工程师(中项)系列22a_信息化知识(上)
躺柒
博客等级 码龄4年 7004粉丝 1322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值