最近在项目上竟然因为聚合函数翻了车,引人深思,发人深省。事故再现在程序包中一个地方需要从某表中求一个数量的和,实际开发过程是把写好的 DEMO 粘贴进来,加了 WHERE 条件,但是懒得删去 GROUP BY,就像下面这样SELECT SUM(t.quantity) INTO l_quantity_s FROM demo_t t WHERE t.item_id = p_item_id
前言用法讲解in, exists 执行流程是否走索引?单表查询多表涉及子查询效率如何?in 和 exists 孰快孰慢not in 和 not exists 孰快孰慢join 的嵌套循环 (Nested-Loop Join)前言最近,有一个业务需求,给我一份数据 A ,把它在数据库 B 中存在,而又比 A 多出的部分算出来。由于数据比较杂乱,我这里简化模型。然后就会发现,我去,这不就是 not i
一、distinct      1、只显示一次重复出现的值     1. select distinct 字段1 [,字段2,字段3,字段3] from 表   如果只有一个字段,则去除字段1的结果集相同的记录,如果有字段1、字段2,则去除字段1和字段2的结果集全部相同的记录。     2、使
索引优化建议在MySQL中要尽可能使用覆盖索引进行检索,只访问索引的查询(索引列和查询列一致),减少select * 可提高查询效率覆盖索引(Covering Index)理解方式一:就是select的数据列只用从索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。理解方式二:索引是高效找到行的一个
# MySQL 中的 today() 函数是否走索引? 在使用 MySQL 数据库时,我们常常会考虑如何优化查询的性能,尤其是在面对大数据集时。索引是一种关键的优化机制,但在某些情况下,函数调用(例如 `today()` 函数)可能导致索引无法被有效利用。今天,我们就来探讨一下 MySQL 中 `today()` 函数的特性以及它是否走索引。 ## 什么是 `today()` 函数? `
原创 11月前
78阅读
1.LEFT JOIN 容易让人误解的地方背景:因为在网上搜了下 LEFT JOIN 和 OUTER APPLY 的区别,时发现,有的网友解释为:的连接的记录数与A表的记录数同.左连接 -- 显示左表所有存在的记录 记录数=左表.像这些说法都不对的.根据我测试得出的结论应该是: 返回结果数
首先讲一下,truncate命令:     语法:TRUNCATE  TABLE  table;   表格里的数据被清空,存储空间被释放。   运行后会自动提交,包括之前其它未提交的会话,因而一旦清空无法回退。   只有表格的创建者或者其他拥有删除任意表格权限的用户(如DB
转载 2024-06-18 21:49:26
83阅读
mysql 松散索引与紧凑索引扫描(引入数据结构) 这一篇文章本来应该是放在 mysql 高性能日记中的,并且其优化程度并不高,但考虑到其特殊性和原理(索引结构也在这里稍微讲一下)一,mysql 索引结构 (B、B+树)要问到 mysql 的索引用到什么数据结构,我相信大部分都能回答出来,没错,就是 B+ 树。那再问为什么要用 B+ 树呢,与红黑树,hash 表又分别有什么区别呢,问到这
index(a,b,c):语句 索引是否发挥作用Where a=3是,只使用了a列Where a=3 and b=5是,使用了a,b列Where a=3 and b=5 and c=4是,使用了abcWhere b=3 or where c=4否Where a=3 and c=4a列能发挥索引,c索引也就不能使用了Where a=3 and b>10 and c=7 A能利用,b能利用, b
## MySQL聚合函数索引 在数据库开发中,MySQL是一个非常常见的关系型数据库管理系统。而聚合函数则是用于对一组值进行计算的特殊函数,比如 `COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()` 等。理解如何在使用聚合函数时,MySQL是否能使用索引,将帮助你优化查询性能。这篇文章将逐步教你如何理解这个问题。 ### 整体流程 以下是我们将要讨论的
  mysql判断sql语句是不是慢查询,是根据语句的执行时间来衡量的,mysql会用语句的执行时间和long_query_time这个系统参数做比较,如果语句执行时间大于long_query_time,都会把这个语句记录到慢查询日志里面。long_query_time的默认值是10s,一般生产环境不会设置这么大的值,一般设置1秒。   语句是否用到索引,是指语句在执行的时候有没有用到表
1.5 不应该建索引列的特点: 第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很
转载 2024-03-29 20:43:35
95阅读
本文从索引优化的实际优化细节和实战案例了解如果利用索引进行优化,话不多说,直入主题:一、实际优化细节 1)索引列查询时尽量使用准确值 2)尽量使用主键查询、因为主键索引不会触发回表操作、主键索引为聚集索引索引中存储索引行数据。 3)使用前缀索引 截取某列的前几个字节,作为索引,前提是截取的这个部分数不能是重复的,如果是重复的和全列扫描没区别; 基数:某列去重之后的数量,值越小效率越高 select
在日常操作中,我们常常会遇到“mysql 删除操作 走索引”的问题。这是一种关注性能优化的需求,尤其是在处理大数据量时,删除操作的效率至关重要。在这篇博文中,我将为大家详细介绍这个问题的解决过程。 ## 环境准备 ### 软硬件要求 - **操作系统**:Linux或Windows - **数据库版本**:MySQL 5.7及以上 - **CPU**:双核及以上 - **内存**:至少4
原创 7月前
36阅读
多表查询内连接查询1.自连接查询2.等值或不等值查询外连接查询1.左外连接查询2.右外连接查询子查询1.in ,exists2.any,all自连接查询表与其自身进行笛卡儿积连接、根据相同名称的字段进行记录匹配,查询结果仅包含符合连接条件与筛选条件的行。为了区别该表的每一次出现,需要为表分别定义别名。INNER JOIN使用比较运算符“ = ”匹配每个表共有列 的列值,查询结果仅包含符合连接条件与
作者:夜风_BLOG在一些业务场景中,会使用NOT EXISTS语句确保返回数据不存在于特定集合,部分同事会发现NOT EXISTS有些场景性能较差,甚至有些网上谣言说”NOT EXISTS不走索引”,哪对于NOT EXISTS语句,我们如何优化呢?以今天优化的SQL为例,优化前SQL为:SELECT count(1) FROM t_monitor m WHERE NOT exists (S
表t_busi_main_presend2建了索引T_BUSI_MAIN_PRESEND2_SHSTATUS在SHSTATUS字段,SHSTATUS char(1) default '0',只有2个值 '0' ,'1'。初始值为‘0’,处理之后为‘1’,表中几十万数据,大部分为‘1’,现在有8条为‘0’。现在,建索引(类型为normal,不能bitmap,锁)后,下面语句竟然是全表!select
转载 2024-07-08 21:20:39
77阅读
今天要和大家说的这个函数,也许是我们大多数人都用的很频繁的一个函数,他就是我们的SUM函数。说到这个函数,他通常被指定为所有参数的求和,当然他的参数可以是区域,也可以是单元格区域,或是数组,常量,公式等等,这个看似简单的函数,却是功能异常强大。他的强大之处我们一一道来,请细听解说! 语 法:SUM(number1,number2, number3 ...),他的第一个参数是必须存在的
# MySQL函数是否走索引 ## 概述 在使用MySQL数据库时,开发人员经常需要考虑SQL查询语句的性能问题。其中一个关键点是判断MySQL函数是否走索引。本文将介绍判断MySQL函数是否走索引的流程,并提供相应的示例代码和注释。 ## 判断流程 为了判断MySQL函数是否走索引,我们可以按照以下步骤进行操作: | 步骤 | 描述 | | --- | --- | | 1 |
原创 2023-12-03 03:06:50
71阅读
概述偷懒一下,分享之前收藏的笔记,大家都知道SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚,今天用图来区别一下sql的连接方式:inner join、left join、right join、full outer join、union、union all。基础环境假设我们有两张表。Table A 是左边的表。Tab
  • 1
  • 2
  • 3
  • 4
  • 5