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

Mysql连接查询查询条件放在On之后Where之后区别

探究 利用廖雪峰提供在线工具,利用student表classes表我们做一个测试, student表 classes表 1.统计每个班级中女生数量 问题SQL select a.name,...* FROM LT LEFT JOIN RT ON P1(LT,RT)) WHERE P2(LT,RT) 其中P1是on过滤条件,缺失则认为是TRUE,P2是where过滤条件,缺失也认为是TRUE,...that P1(lt, rt) {// 遍历右表每一行,找到满足join条件行 IF P2(lt, rt) {//满足 where 过滤条件 t:=lt||rt;//合并行,输出该行...on 后跟关联表(从表)过滤条件where 后跟主表或临时表筛选条件(左连接为例,主表数据都会查询到,所以临时表中必定包含主表所有的字段,需要给主表加什么筛选条件,直接给临时表加效果相同) 总结...通过上面的问题现象分析,可以得出了结论:在left join语句中,左表过滤必须放where条件中,右表过滤必须放on条件中,这样结果才能不多不少,刚刚好。

1.5K10

谈谈SQL查询中回表对性能影响

运营反馈某个功能速度很慢,查了一下,定位到如下 SQL: select id from user where name like ‘%foobar%’ order by created_at limit...10; 业务需要,LIKE 时候必须使用模糊查询,我当然知道这会导致全表扫描,不过速度确实太慢了,直观感受,全表扫描不至于这么!...我使用数据库是 PostgreSQL,不过它 MySQL 差不多,也可以 EXPLAIN: SQL With LIMIT 如上所示:先按照 created_at 索引排序,再 filter 符合条件数据...出于经验主义,我去掉了 limit 再执行: select id from user where name like ‘%foobar%’ order by created_at; 果不其然,速度快了好几倍...要想搞清楚缘由,你需要理解本例中 SQL 查询处理流程:当使用 limit 时,因为只是返回几条数据,所以优化器觉得采用一个满足 order by 索引比较划算;当不使用 limit 时,因为要返回所有满足条件数据

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

干货 | 携程酒店查询治理之路

查询不带where条件 不带where条件直接查询\修改全表是很危险操作,表数据量够大的话,尽量拆分成多批次操作。...分批可以采用分段拉取减少扫描行数,如果分段拉取不连续的话可以传入上一次拉取最大值作为下一次起始值: 最大最小值写法 由于where条件字段数据分布问题,会导致maxmin查询非常: explain...排序聚合写法 通常SQL在使用Group by及Order by后,会产生临时表和文件排序操作。若查询条件数据量非常大,temporaryfilesort都会产生额外巨大开销。...*注意从MySQL 8.0开始,不会再有这种情况了,因此不需要ORDER BY NULL写法了 (4)资源 锁资源等待 在读写很热表上,通常会发生锁资源争夺,从而导致查询情况。 a....但是经过长期优化后发现,仅仅从数据库层面优化,并不能实现查询完全“清零”,还有很多痛点来自于业务逻辑应用层面本身。

68530

当一个查询语句同时出现了where,group by,having,order by时候,执行顺序编写顺序是:

目录 1 编写顺序 1 编写顺序 当一个查询语句同时出现了where,group by,having,order by时候,执行顺序编写顺序是: 1.执行where xx对全表数据做筛选,返回第1...2.针对第1个结果集使用group by分组,返回第2个结果集。 3.针对第2个结果集中1组数据执行select xx,有几组就执行几次,返回第3个结果集。...Group By Having, Where ,Order by这些关键字是按照如下顺序进行执行Where, Group By, Having, Order by。...-- 3、查询平均成绩大于等于60分同学学生编号学生姓名和平均成绩 select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score from...score a on b.s_id = a.s_id GROUP BY b.s_id,b.s_name HAVING avg_score >=60; 根据题意,需要用到信息表 成绩表 首先查出有成绩学生

78520

explain各字段含义

另: key_len只计算where条件用到索引长度, 而排序分组就算用到了索引,也不会计算到key_len中. 9.ref 如果使用常数等值查询, 这里会显示const; 如果是连接查询, 被驱动表执行计划这里会显示驱动表关联字段...即不需要进行filesort Using temporary: 查询有使用临时表, 一般出现于排序, 分组多表 join 情况, 查询效率不高, 建议通过优化去掉....where:查找使用了索引,但是需要数据都在索引列中能找到,所以不需要回表查询数据 using index 好于 using where 好于 using index condition, 不需要回表查询数据...[1] mysql 索引type介绍[2] MySQL优化:定位查询两种方法以及使用explain分析SQL[3] limit 会对explaintype产生巨大影响 关于order by优化...具有LIMIT具有LIMITORDER BY可能是不同 file_sort优化器会预先分配固定数量sort_buffer_size字节。

19741

聊聊PostgreSQL几种索引类型

• 普通类型:与B-Tree类似 • 空间类型:包含 Bloom • 多列:任意列组合,等值查询 • 表达式索引 • 搜索条件为表达式 • where st_makepoint(x,y) op ?...• create index idx on tbl ( (st_makepoint(x,y)) ); • 条件索引(定向索引) • 搜索时,强制过滤某些条件where status='active..., 1% 异常数据 索引特性 只有B-tree,GiST,GINBRIN索引类型支持多列索引。...在PostgreSQL当前支持索引类型中,只有B-tree可以产生排序输出,当ORDER BY与LIMIT n组合:显式排序将必须处理所有数据以识别前n行,但如果存在与ORDER BY匹配索引,则可以直接检索前...PostgreSQL支持仅索引扫描,当要查询目标列都在索引中时,直接使用索引中键值进行返回,不需要回表操作。 技术永无止境,加油吧。 Catch.jpg

5.1K20

MySQL如何破解limit 100w+分页查询

版本:MySQL 5.7 三、优化前 我们先不进行任何优化处理,直接采用最原始limit方式查询,如下SQL: select type from order_info where user_id =...1.先查询主键id select id from order_info where user_id = 17898735496 limit 2000000,10 执行结果: > OK > 时间: 0.607s...如果limit index小于1w,就直接查询所有的数据,如果limit index大于等于1w,就采用先查询id,后in条件查询所有数据。...例如: select type from order_info where id > 10000 limit 10 但是这样有个前提就是,id需要是自增长,其次是需要是顺序查询,不能够进行跳页查询,而且还不能有按字段排查情况...第二步根据id查询数据,那就更快了,基本上秒出来。 当然真实生产中,我们还需要根据实际业务适配对应逻辑,就比如:如果99%分页不会到1w以上,那基本不会发生这种SQL了。

99010

新特性解读 | MySQL 8.0 语句摘要功能介绍

select * from p1 where id >N-N order by rand() limit N 对日志进行过滤分析,按照执行次数排序,拿出前 10 条语句,比如第 1 条语句:...select * from p1 where id > N order by rand() limit N; 这里 N 代表数字,也就是说无论数字多少,都可以用这条语句来代替。...select * from p1 where id > 1000 order by rand() limit 2; select * from p1 where id > 1000 order by...rand() limit 10; select * from p1 where id > 20000 order by rand() limit 100; 用来代替这几条 SQL 语句文本叫做摘要文本...现在来用以上两个函数来计算下上面这 3 条 SQL 摘要。结果日志过滤分析一样,不过数字 N 变为“?”,这 3 条语句为一个类型,摘要文本一样。

61541

千万级数据表选错索引导致线上查询事故

「可以看到是有idx_city_id_typeidx_1索引」,我们查询条件是city_idtype,这两个索引都是能走到。 但是,我们查询条件真的只要考虑city_idtype吗?...) where ( ( (1 = 1) and (city_id = 565) ) and (type = 13) ) order by id desc limit 0, 1 这次明显执行飞快,分析语句...实际上explainrows是MySQL「预估」行数,「是根据查询条件、索引limit综合考虑出来预估行数。」 MySQL是怎样得到索引基数呢?...为何突然出现异常查询 问:这个查询语句已经在线上稳定运行了非常长时间,为何这次突然出现了查询? 答:以前语句查询条件返回结果都不为空,limit1很快就能找到那条数据,返回结果。...「最后做个文章总结:」 该查询语句中使用order by id导致优化器在主键索引city_idtype联合索引中有所取舍,最终导致选择了更慢索引。

1.4K30

MySQL选错索引导致线上查询事故复盘

赶紧查看SQL记录,发现都是同一类语句导致查询(隐私数据例如表名,我已经隐去): select * from sample_table where 1 = 1 and (city_id...可以看到是有idx_city_id_typeidx_1索引,我们查询条件是city_idtype,这两个索引都是能走到。 但是,我们查询条件真的只要考虑city_idtype吗?...) where ( ( (1 = 1) and (city_id = 565) ) and (type = 13) ) order by id desc limit 0, 1 这次明显执行飞快,分析语句...实际上explainrows是MySQL预估行数,是根据查询条件、索引limit综合考虑出来预估行数。 MySQL是怎样得到索引基数呢?...为何突然出现异常查询 问:这个查询语句已经在线上稳定运行了非常长时间,为何这次突然出现了查询? 答:以前语句查询条件返回结果都不为空,limit1很快就能找到那条数据,返回结果。

94840

Mysql进阶优化篇05——子查询优化排序优化

这样会消耗过多 CPU IO 资源,产生大量查询。 子查询结果集存储临时表,不论是内存临时表还是磁盘临时表都 不会存在索引 ,所以查询性能会受到一定影响。...b索引/ WHERE a = const ORDER BY a,d /d不是索引一部分/ WHERE a in (…) ORDER BY b,c /对于排序来说,多个相等条件也是范围查询/ 2.3 案例实战...age = 30 AND stuno <101000 ORDER BY NAME ; 方案二:尽量让 where 过滤条件排序使用上索引 建一个三个字段组合索引: DROP INDEX idx_age_name...当【范围条件【group by 或者 order by】字段出现二选一时,优先观察条件字段过滤数量,如果过滤数据足够多,而需要排序数据并不多时,优先把索引放在范围字段上。反之,亦然。...having,能写在 where 限定条件就不要写在 having 中了 减少使用 order by,业务沟通能不排序就不排序,或将排序放到程序端去做。

2K20

MySQL排序与分页详解

LIMIT 4,3;”返回结果相同。...使用 LIMIT 好处 约束返回结果数量可以减少数据表网络传输量,也可以提升查询效率 。如果我们知道返回结果只有1条,就可以使用 LIMIT 1,告诉 SELECT 语句只需要返回一条记录即可。...这样好处就是 SELECT 不需要扫描完整表,只需要检索到一条符合条件记录即可返回。 拓展 在不同 DBMS 中使用关键字可能不同。...在MySQL、PostgreSQL、MariaDB SQLite 中使用 LIMIT 关键字,而且需要放到 SELECT 语句最后面。...练习题 1.查询员工姓名部门号年薪,按年薪降序按姓名升序显示 SELECT last_name, department_id, salary * 12 annual_salary FROM employees

1.9K60

【mysql】limit实现分页

分页 1. 背景: 背景1查询返回记录太多了,查看起来很不方便,怎么样能够实现分页查询呢? 背景2:表里有 4 条数据,如果只想要显示第 2、3 条数据怎么办呢? 2....实现规则 分页原理 所谓分页显示,就是将数据库中结果集,一段一段显示出来需要条件。...如果我们知道返回结果只有 1 条,就可以使用LIMIT 1,告诉 SELECT 语句只需要返回一条记录即可。这样好处就是 SELECT 不需要扫描完整表,只需要检索到一条符合条件记录即可返回。...在不同 DBMS 中使用关键字可能不同。在 MySQL、PostgreSQL、MariaDB SQLite 中使用 LIMIT 关键字,而且需要放到 SELECT 语句最后面。...练习 查询员工姓名部门号年薪,按年薪降序,按姓名升序显示 SELECT last_name,department_id,salary * 12 annual_salary FROM employees

3.2K60

MySQL选错索引导致线上查询事故

可以看到是有idx_city_id_typeidx_1索引,我们查询条件是city_idtype,这两个索引都是能走到。 但是,我们查询条件真的只要考虑city_idtype吗?...) where ( ( (1 = 1) and (city_id = 565) ) and (type = 13) ) order by id desc limit 0, 1 这次明显执行飞快,分析语句...实际上explainrows是MySQL预估行数,是根据查询条件、索引limit综合考虑出来预估行数。 MySQL是怎样得到索引基数呢?...为何突然出现异常查询 问:这个查询语句已经在线上稳定运行了非常长时间,为何这次突然出现了查询? 答:以前语句查询条件返回结果都不为空,limit1很快就能找到那条数据,返回结果。...最后做个文章总结: 该查询语句中使用order by id导致优化器在主键索引city_idtype联合索引中有所取舍,最终导致选择了更慢索引。

2.1K00

见招拆招-PostgreSQL中文全文索引效率优化

前言 上文 使用PostgreSQL进行中文全文检索 中我使用 PostgreSQL 搭建完成了一套中文全文检索系统,对数据库配置分词都进行了优化,基本查询完全可以支持,但是在使用过程中还是发现了一些很恼人问题...tsq OR name LIKE 'keyword%' LIMIT 10000) AS tmp ORDER BY score DESC。...---- 替换B树索引消灭查询 多索引效率问题 本以为优化到此为止了呢,可是有次在试着查询 中关村 东 两个关键词时,我明确感觉到了响应时间差异, 100ms 左右时间差还是很明显。...接着我又尝试改变 SQL 语句 WHERE 条件,去除 OR name LIKE 'keyword%' 后, 总条数并没有太大变动,结果集由 13w 减小到了 11w, 但 添加 limit效率却急剧提升...此后,B树索引就可以退休啦~ ---- 小结 以上就是我对 PostgreSQL 关键词查询从效果到效率优化全过程了,效果效率已经完全达标了。

2.1K80
领券