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

MySQL 多表联合查询何讲究?

查询的时候也是先查询里边的子查询(即先查询 department ),然后再执行外表的查询,我们可以看下它的执行计划: 可以看到,首先查询部门索引就用索引,没有索引就全扫描,然后查询员工,...如果用 in 关键字查询的话,先部门再员工,一般来说部门数据是要小于员工数据的,所以这就是小驱动大,效率比较高。...为什么要小驱动大MySQL 中,这种多表联合查询的原理是:以驱动数据为基础,通过类似于我们 Java 代码中写的嵌套循环 的方式去跟被驱动表记录进行匹配。...从这两个数据对比中我们就能看出来,小驱动大效率要高。核心的原因在于,搜索被驱动的的时候,一般都是索引的,而索引的搜索就要快很多,搜索次数也少。 3. 没有索引咋办?...对于这种被驱动上没有可用索引的情况,MySQL 使用了一种名为 Block Nested-Loop Join (简称 BNL)的算法,这种算法的步骤是这样: 把 E 数据读入线程内存 join_buffer

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

    MySQL数据查询之单查询

    查询 简单查询 - 创建 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT...你需要强制让MySQL按中文来排序 聚合查询 聚合: 将分散的聚集到一起....Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数 分页查询 好处:限制查询数据条数,提高查询效率 #查询前5条数据 select...person limit 10,5; ps: limit (起始条数),(查询多少条数); 正则表达式 MySQL中使用 REGEXP 操作符来进行正则表达式匹配。...首先执行 FROM 子句, 从 person 组装数据源的数据    (2). 执行 WHERE 子句, 筛选 person 中 name 不为 NULL 的数据    (3).

    6.3K30

    第42期:MySQL 是否必要多分区

    图片 之前的篇章我们讨论的都是基于单列的分区,那有无必要建立基于多的分区?这种分区数据分布是否均匀?有无特殊的应用场景?有无特殊的优化策略?本篇基于这些问题来进行重点解读。...MySQL 不仅支持基于单列分区,也支持基于多分区。比如基于字段(f1,f2,f3)来建立分区,使用方法和使用场景都有些类似于联合索引。比如下面查询语句,同时对(f1,f2,f3) 进行过滤。...为多分区,此时p1201个分区,记录数为500W条。...,p1扫描行数只有2W多,而p2扫描行数62W行,相差巨大。...对于某些特定的场景,使用多分区能显著加快查询性能。

    1.8K30

    mysql的limit查询竟然坑?

    背景 最近项目联调的时候发现了分页查询的一个bug,分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。....png) 那么问题来了,查询第一页和第二页的时候都出现了11,12,13的记录,而且都没出现 4 的记录。总有数据查不到这是为啥???...,查询结果显然不是按照某一排序的(很乱)。...分析问题 为什么limit查询不加order by就会出现 分页查询总有数据查不出来或者重复查出? 是不是隐含的order排序? 此时explain登场(不了解的百度)。...总结 一说MySQL优化大家都知道explian,但是真正有价值的是场景,是让你的知识落地的场景。实践出真知。

    18410

    MySQL】分区字段是否必要再单独建索引

    下面来验证一下 1、新建effect_new(以创建时间按月分区) CREATE TABLE `effect_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT...LESS THAN (737029) ENGINE = InnoDB, PARTITION p10 VALUES LESS THAN (737060) ENGINE = InnoDB); 2、插入部分数据数据...rows filtered extra 1 SIMPLE effect_new p8 ref idx_ctime idx_ctime 5 const 60760 100 null 6、结论: 虽然已经根据此字段分区...有时候,主键不等于分区依据,这时候主键又想建聚集索引的话,那么必须包含分区依据,搞成复合主键。那么,这种情况下,分区依据不就有索引了吗?...是的,可是它不够快,如果在这个复合索引里面,分区依据不排在第一位,就不够快,如果查找语句里常常用分区依据列作为过滤条件,就有必要为分区依据额外单独建立一个索引。

    2.5K30

    MS SQL查询库、数据结构信息汇总

    前言 一般情况我们下,我们是知道数据库的信息的(因为数据库是我们手动设计),但特殊情况下,如果你只能拿到数据库连接信息,也就是知道的一个数据库名的情况下,你要怎么得到它下面的所有名,所有列表,以及主键...1、某数据库下的所有。 代码如下: SELECT TABLE_NAME FROM 数据库名.INFORMATION_SCHEMA.TABLES 结果如图: ? 2、某的所有字段。...3、查询中的主键。 代码如下: EXEC SP_PKEYS 名 结果如图: ? 4、查询主键是否为自增。...结束 拥有以上代码,基本在数据库“反射”查询的时候,能派上用处,也基本够用了,其原理就是利用SqlServer的内置函数,系统存储方法,以系统(sysobjects、syscolumns)的id为主导线...,展开的查询,其中sysobjects的id等于syscolumns中的id,注意,每修改一次结构(即数据)这个id都会发生改变。

    2.2K40

    MySQL查询

    是一种数据库分割技术,用于将大拆分成多个小,以提高数据库的性能和可管理性。在MySQL中,可以使用多种方法进行分,例如基于范围、哈希或列表等。...下面将详细介绍MySQL如何分以及分后如何进行数据查询。 基于哈希的分 基于哈希的分是一种将数据分散到多个子表中的数据库分策略。这种方法通过计算数据的哈希值来决定数据应该存储在哪个子表中。...性能优化和注意事项 •索引: 在子表中创建合适的索引以加速范围查询操作。通常,根据范围条件的需要创建索引。•查询性能: 基于范围的分适用于按照范围条件进行查询的场景。...•查询路由算法: 查询路由算法应该与数据分布策略一致,以确保正确路由查询。 基于列表的分 基于列表的分是一种数据库分策略,它根据某个的值将数据分割到不同的子表中。...性能优化和注意事项 •索引: 在子表中创建合适的索引以加速查询操作。通常,根据查询条件的需要创建索引。•查询性能: 基于列表的分适用于按照特定条件进行查询的场景。

    96420

    MySql学习笔记(一)- 类型哪些,怎么用?

    天天在用mysql,你说sql什么学的,但是面试官说你学的都是皮毛。怎么样?...所以说一张就是一棵树,那么这个树的类型哪些?这也就是我们标题所示的类型。 那么具体的类型哪些?...mysql的基本类型MyISAM、InnoDB、DBD、MEMORY、MERGE、EXAMPLE、NDB CLUSTER、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。...如果创建的时候不指定类型,默认为InnoDB,这是mysql5.5之后约定的规范。当然您可以通过修改ini文件来指定默认的类型。 ?...MERGE 是一组myisam的组合,但是这些myisam的结构完全相同,MERGE本身没有数据,对MERGE可以进行查询更新删除操作,这些其实是对myisam的操作。

    2.4K30

    MySQL查询导出数据结构信息

    问题描述 最近在写文档,需要用到数据库设计文档,结构很多,如果一个个去复制黏贴,也是很花时间,所以需要借助INFORMATION_SCHEMA库的 补充: information_schema数据库是...MySQL自带的,它提供了访问数据库元数据的方式。...元数据是关于数据数据,如数据库名或名,数据类型,或访问权限等 解决方案 所以,需要借助INFORMATION_SCHEMA的里系统,通过如下SQL查询: SELECT b.COLUMN_NAME...' AND a.table_name = '数据名称' 通过SQL查询数据 然后复制一下数据库里的数据,在word文档里,选择,然后黏贴一下就可以 总结归纳 通过这个方法,节省了写文档的时间...,可以更多时间去写代码,补充INFORMATION_SCHEMA是MySQL数据库系统很重要的库,我们可以通过里面的系统排查一些性能问题,也可以像本文一样来查出结构来提高写文档效率,活学活用,学到的知识需要用起来

    5.4K40
    领券