首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL使用技巧

2、MySQL实现行转列 (1)group by和group_concat()函数组合使用,substring_index(group_concat(),',',N)取前N个数据 (2)as取列名为别名...,再使用union all将多个查询结果拼接,最后用order by对整体结果排序(列字段少时使用) 3、使用join更新表 update tab1 join tab2 on xx set xx where....... 4、子查询批量插入数据 insert into tab(col1,col2...) select ... 5、活用正则表达式 regexp   ^ $ . * + |  6、关联查询比子查询效率快...,优先使用join关联查询 7、if(exp,v1,v2)  if()函数的使用 exp:表达式 v1:exp为真时返回的值 v2:exp为假时返回的值 8、case when... then... else...by比distinct性能快,考虑性能优先使用group by去重 10、coalesce()函数处理空值 (1)coalesce(col,xxx) 将空值null替换成xxx (2)coalesce(subselect

80630

一文了解Optimizer Trace

repeated_subselect 子查询,如果关闭的话,只有第一次调用Item_subselect才被跟踪。...如果语句中使用多个SELECT语句拼接(如UNION)或者有嵌套子查询中有SELECT,会产生多个序号。例如下面例子就是使用UNION的结果。...如下图显示可使用b字段索引或a字段索引。 ❖ setup_range_conditions 如果有可下推的条件,则带条件考虑范围查询。...那么除此之外,优化器还对比了索引组合的情况。这种方式即查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。...如果是多表关联,且有存在执行顺序(如left/right join或straight_join来强制指定顺序),则在plan_prefix部分会有前置条件;否则,就按照所有可能性评估。

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 子查询优化源码分析

    通常情况下,我们可以将出现在SELECT、WHERE和HAVING语法中的子查询块称为嵌套子查询,出现在FROM语法后的子查询块称为内联视图或派生表。...本篇将会结合源码介绍在MySQL中针对子查询的几种优化策略。 1 子查询定义 子查询定义在一个完整的查询语句中包含的子查询块被称为子查询。...通常情况下,我们可以将出现在SELECT、WHERE和HAVING语法中的子查询块称为嵌套子查询,出现在FROM语法后的子查询块称为内联视图或派生表。...本篇文章将会结合源码介绍在MySQL中针对子查询的几种优化策略。...必须是单个查询块,不带有UNION。 不包含HAVING语法。 不包含任何聚合函数。 不包含LIMIT语法。 外查询语句没有使用STRAIGHT_JOIN语法。

    2K20

    Hibernate 的性能优化的时候碰到了抓取策略,有四种

    查询抓取(Select fetching) - 另外发送一条 SELECT 语句抓取当前对象的关联实  体或集合。...子查询抓取(Subselect fetching) - 另外发送一条SELECT 语句抓取在前面查询到  (或者抓取到)的所有实体对象的关联集合。...在此, Hibernate 使用了 left outer join 连接两个表以一条 SQL 语句将 Order 集合 给初始化了; 查询抓取(Select fetching)     查询抓取, 这种策略是在集合抓取的时候的默认策略...通过一个主键或外键 列表 做到的, 他将 4 个 Customer 根据 batch-size 分成了两组, 一组有三个 Customer id 值的列表,第二组只有一个, 在初始化 orders 集合的时候就是根据这两个列表来初始化的..., 例如, 如果我需要初始化的是一个单独的实体, 那 么 subselect 对其就没有效果,因为其本身就只需要查询一个对象, 所以 : Join fetching , Select fetching

    1.2K70

    Hibernate 的性能优化的时候碰到了抓取策略,有四种

    查询抓取(Select fetching) - 另外发送一条 SELECT 语句抓取当前对象的关联实  体或集合。...在此, Hibernate 使用了 left outer join 连接两个表以一条 SQL 语句将 Order 集合 给初始化了; 查询抓取(Select fetching)     查询抓取,...Hibernate 的命名很清晰的; 批量抓取(Batch fetching) 批量抓取:"对查询抓取的优化方案,通过指定一个主键或外键列表,Hibernate使用 单条SELECT语句获取一批对象实例或集合...通过一个主键或外键 列表 做到的, 他将 4 个 Customer 根据 batch-size 分成了两组, 一组有三个 Customer id 值的列表,第二组只有一个, 在初始化 orders 集合的时候就是根据这两个列表来初始化的..., 例如, 如果我需要初始化的是一个单独的实体, 那 么 subselect 对其就没有效果,因为其本身就只需要查询一个对象, 所以 : Join fetching , Select fetching

    58190

    MySQL数据库,从入门到精通:第六篇——全面掌握MySQL多表查询技巧

    通过本文的学习,大家可以更加深入地理解和掌握MySQL的多表查询技巧,为日常的业务逻辑处理提供更好的技术支撑。 第六篇_多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。...假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。...组合的个数即为两个集合中元素个数的乘积数。 SQL92中,笛卡尔积也称为 交叉连接 ,英文是 CROSS JOIN 。在 SQL99 中也是使用 CROSS JOIN表示交 叉连接。...使用FULL JOIN 或 FULL OUTER JOIN来实现。 需要注意的是,MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT JOIN 代替。...UNION的使用 合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。

    16110

    MySQL基础-多表查询

    UNION的使用 四、7种SQL JOINS的实现 五、SQL99语法新特性 MySQL基础-多表查询 一、案例及引入 1、基础概念 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作 前提条件...组合的个数即为两个集合中元素个数的乘积数 笛卡尔积的错误会在下面条件下产生: 省略多个表的连接条件(或关联条件) 连接条件(或关联条件)无效 所有表中的所有行互相连接 为了避免笛卡尔积, 可以在 WHERE...使用FULL JOIN 或 FULL OUTER JOIN来实现 需要注意的是,MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替 三、UNION的使用...合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集 合并时,两个表对应的列数和数据类型必须相同,并且相互对应。...各个SELECT语句之间使用UNION或UNION ALL关键字分隔 UNION 操作符返回两个查询的结果集的并集,去除重复记录 UNION ALL操作符返回两个查询的结果集的并集。

    2.8K20

    MySQL常用SQL语句:插入更新删除查询

    整理一些MySQL常用SQL语句:插入、更新、删除、查询、根据指定的列对结果集进行排序等。...关于联合主键:联合主键就是用2个或2个以上的字段组成主键。用这个主键组合包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。 1....mysql不支持full join,但可以通过左外连接 + union + 右外连接来实现(left join + union(可去除重复数据)+ right join) #select * from...形式的SQL语句称为查询块。当一个查询块的SELECT子句或者WHERE子句中嵌套了另一个查询块的查询语句就称为嵌套查询。最外层的查询称为外层查询或父查询,最内层的查询称为内层查询或子查询。...其中,UNION和UNION ALL都会做并集,但UNION会去除重复的记录。最后,MySQL不支持INTERSECT和EXCEPT。

    6.7K30

    写了 5 年代码,就没见过这么全的MySQL 关联查询知识

    在数据库管理中,关联查询(JOIN)是MySQL中一个非常重要的功能,它允许你根据两个或多个表之间的相关性来检索数据。...关联查询的基本概念 关联查询是SQL语言中的一种基本操作,它允许你根据一个或多个共同字段将两个或多个表连接起来。这些共同字段通常被称为连接条件或连接键。...通过关联查询,你可以从一个或多个表中检索出满足特定条件的数据行,并将它们组合成一个结果集。...MySQL支持多种类型的关联查询,包括INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)、FULL JOIN(全连接,MySQL不支持但可通过UNION模拟)和...CROSS JOIN(交叉连接) CROSS JOIN返回两个表的笛卡尔积,即两个表中所有行的组合。这种查询通常会产生大量的结果集,因此在实际应用中很少使用,除非你有特定的需求。

    28700

    mysql explain用法和结果的含义

    :UNION中的第二个或后面的SELECT语句 DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询 UNION RESULT:UNION 的结果 SUBQUERY...Extra 该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...SIMPLE:简单SELECT(不使用UNION或子查询) PRIMARY:最外面的SELECT UNION:UNION中的第二个或后面的SELECT语句 DEPENDENT UNION:UNION中的第二个或后面的...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

    2.1K10

    explain 深入剖析 MySQL 索引及其性能优化指南

    3)DERIVED:派生表的SELECT(FROM子句的子查询) ? ? 4)UNION:UNION中的第二个或后面的SELECT语句 ? 5)UNION RESULT:UNION的结果。 ? ?...6)DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询 ? 7)SUBQUERY:子查询中的第一个SELECT ?...ref:针对于非唯一或主键索引,或使用二者”最左部分字段”索引的等值查询或多表join,查询效率由这个值返回的行数多少决定。   ...此时key字段有两个或多个索引, key_len/rows都分别有两个数值; 如果是并集操作”Using intersect”, 往往通过两个索引的字段,合并为一个索引,避免index_merge查询...下图中两个SQL一个是AND/OR, Using intersect 和Using union 分别表示使用两个索引后的交集和并集 ?

    1.8K60

    MySQL-Select语句高级应用

    当一个子条件为true而另一个子条件为false时,其结果为true; 当两个条件都为true或都为false时,结果为false。...ORDER BY population;       sql说明:使用natural join 进行相等连接,两个表,条件为人口大于1000000的,进行升序排列。...]      ⛳ UNION用于把两个或者多个select查询的结果集合并成一个      ⛳ 进行合并的两个查询,其SELECT列表必须在数量和对应列的数据类型上保持一致      ⛳ 默认会去掉两个查询结果集中的重复行...1.5.7 子查询 子查询定义   在一个表表达中可以调用另一个表表达式,这个被调用的表表达式叫做子查询(subquery),我么也称作子选择(subselect)或内嵌选择(inner select)...其中包含 MySQL 数据库服务器所管理的所有对象的相关数据   使用 SHOW 语句。用于获取数据库和表信息的 MySQL 专用语句   使用 DESCRIBE(或 DESC)语句。

    3.9K00

    【MySQL】语句执行分析

    这是SELECT的查询序列号 select_type SELECT类型,可以为以下任何一种:SIMPLE:简单SELECT(不使用UNION或子查询)PRIMARY:最外面的SELECTUNION:UNION...中的第二个或后面的SELECT语句DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询UNION RESULT:UNION 的结果SUBQUERY:子查询中的第一个...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...SIMPLE:简单SELECT(不使用UNION或子查询) PRIMARY:最外面的SELECT UNION:UNION中的第二个或后面的SELECT语句 DEPENDENT UNION:UNION中的第二个或后面的...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

    1.7K40

    GaussDB T 性能调优——SQL问题分析之解读执行计划

    其他常见的执行计划 ● SUBSELECT(子查询) 下列执行计划显示,表t3在一个子查询里面,表t1和这个子查询走哈希半连接,这个子查询作为一个整体来执行。...执行计划中使用SUBSELECT表示子查询。 ? ● VIEW(视图) 根据能否直接处理视图中的基础表分为两种情况: – 能够直接处理视图中的基础表,此时执行计划中可能不会显示关键字VIEW。...● 层级查询 下列执行计划表示:在层级查询中第一层走表s和表t的嵌套查询,并且表s走索引 pk_cbo_ef_data_1w_s的唯一扫描,表t走索引ef1w_s_intf0_idx的范围扫描;层级查询的其他层走表...● UNION/UNION ALL 下列执行计划表示:表t1和表t2走索引快速全扫描之后的结果进行union。得到结果后再与t3表进行union all。...执行计划中使用UNION ALL表示UNION ALL,使用 HASH UNION表示UNION。 ?

    1.4K32

    实践中如何优化MySQL(收藏)

    SQL语句的优化: 1、尽量避免使用子查询 3、用IN来替换OR 4、LIKE前缀%号、双百分号、_下划线查询非索引列或*无法使用到索引,如果查询的是索引列则可以 5、读取适当的记录LIMIT M,N...**当然,union all的前提条件是两个结果集没有重复数据。**所以一般是我们明确知道不会出现重复数据的时候才建议使用 union all 提高速度。...索引的优化: 1、Join语句的优化 Join 性能点 当我们执行两个表的Join的时候,就会有一个比较的过程,逐条比较两个表的语句是比较慢的,因此可以把两个表中数据依次读进一个内存块中,在Mysql...Mysql查询优化器会对查询的字段进行改进,判断查询的字段以哪种形式组合能使得查询更快,所有比如创建的是(a,b)索引,查询的是(b,a),查询优化器会修改成(a,b)后使用索引查询。...8.字符串不加单引号索引失效 9.少用or,用它来连接时会索引失效 10.尽量避免子查询,而用join 11、在组合索引中,将有区分度的索引放在前面 如果没有区分度,例如用性别,相当于把整个大表分成两部分

    1.5K85
    领券