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

移动下SQL中的表位置,性能提高18倍

我是最听不得这些哀怨的,不仅仅是喊的难听,那些消极的声音,仿佛来自地狱的催命;更多是觉得,那是对我们这些DB Guy及其不友好的宣战啊。 DBA是公司最宝贵的资源,我们肯定调度过不来。索性自己上吧。...幸好只是开发库,只有数量不多的连接,一查就知道,某个SQL发出了SOS的等待,占用大量的CPU,而且还在拼命的发出多线程请求。截获了它的SQL文本,拿出来一看,差点吓尿。 ?...排除那些复杂的 Index Spool,Stream Aggregation,这里面最吸引我的是同一张表,居然要扫描两次,就是那张 XXX_PER表。...所以我不得不重新看下这段SQL的逻辑,简直是鬼才! 这种写法,大约就是“只有我看得懂的SQL,你们离不开我”的想法作祟下,搞出来的鬼。据我经验分析,往往都是刚出道的小聪明。...把所有用到的列,都加到一个索引里面。再检查下执行计划 ? 干净了,变快了。4秒,87426 条数据。18 倍的性能提升。当然,还有提升空间。 短暂的小插曲,每天都有。及时复盘,提高自己水平。

71830

MySQL索引与SQL语句优化

4.联合索引:在多个字段上建立索引,能够加速查询到速度 5.Union:对两个结果集进行并集操作,不包括重复的行,同时进行默认规则排序 6.Union all:对两个结果集进行并集操作,包括重复行,不进行排序...更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能。   “性别”这种区分度不太大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似。   ...12、利用覆盖索引来进行查询操作,避免回表。   被查询的列,数据能从索引中取得,而不是通过定位符row-locator再到row上获取,即“被查询列要被所建的索引覆盖”,这能够加速度查询。...18、Select语句务必指明字段名称 19、如果排序字段没有用到索引,就尽量少排序 20、尽量用union all 代替 union。   ...Union需要将集合合并后在进行唯一性过滤操作,这会涉及到排序,大量的cpu运算,加大资源消耗及延迟,当然,使用union all的前提条件是两个结果集没有重复数据。

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

    SQL治理经验谈:索引覆盖

    /DEPENDENT SUBQUERY/DEPENDENT UNION)table: 表名Partitions: 表连接的分区数type: 查询中使用的访问类型(system/const/eq_ref/...ref/range/index/ALL),见下表type的字段解析possible_keys显示可能应用在这张表中的索引,一个或多个。...因为select 列 和 where 条件语句 两个变量,都可能导致sql执行效果走了全表扫描,性能非常差。...,检索性能和二级索引树的数据量相关;sql性能随着二级索引树节点数量变多,性能变差结果说明案例一的select * 性能优化,可以通过案例二的方法去优化:select [索引列] 因为索引覆盖,所以会避免了全表扫描的结果...,最终性能有提高案例三:联合索引列检索 select [多索引列]我们对表的 name、age设置了联合索引-- 联合索引 索引覆盖,通过联合索引idx_on_name_age的页节点,可以直接过滤到ALTER

    9500

    MySQL索引详解(优缺点,何时需要不需要创建索引,索引及sql语句的优化)

    MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化) 一、什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。...二、索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度) 三、优点: 通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。...更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能。 “性别”这种区分度不太大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似。 一般区分度在80%以上就可以建立索引。...18、Select语句务必指明字段名称 19、如果排序字段没有用到索引,就尽量少排序 20、尽量用union all 代替 union。...Union需要将集合合并后在进行唯一性过滤操作,这会涉及到排序,大量的cpu运算,加大资源消耗及延迟,当然,使用union all的前提条件是两个结果集没有重复数据。 21、使用合理的分页提高效率。

    3.4K10

    【116期】MySQL索引优缺点、何时需要不需要创建索引、索引及sql语句的优化

    索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。 二、索引的作用?...索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度) 三、优点: 通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。...更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能。“性别”这种区分度不太大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似。一般区分度在80%以上就可以建立索引。...18、Select语句务必指明字段名称 19、如果排序字段没有用到索引,就尽量少排序 20、尽量用union all 代替 union。...Union需要将集合合并后在进行唯一性过滤操作,这会涉及到排序,大量的cpu运算,加大资源消耗及延迟,当然,使用union all的前提条件是两个结果集没有重复数据。 21、使用合理的分页提高效率。

    2.5K30

    Mysql explain命令详解

    system当表中只有一条记录,并且该表使用的存储引擎的统计数据是精确的,比如MyISAM、Memory,那么对该表的类型就是system,当再加一条数据就是all,平时一般用不上,可以忽略。...eq_refeq_ref出现在连表查询的时候,当被驱动表(主表)是通过主键索引或唯一索引或联合索引(联合索引要求每一列都进行联合匹配)进行访问关联的,则对于被驱动表就是eq_ref的类型。...(PRIMARY,idx_student_name); Using where在OR拼接的两个字段上都有索引,一个Select关键字只能使用一个索引,所以这里使用了合并索引为一个虚拟索引的办法,相当于扫描两个索引树取出主键并取并集再回表的操作...filtered值越高,意味着在特定操作中筛选出的有效数据比例越大,可能表示查询的条件过滤效果较好,减少了后续操作需要处理的数据量,从而可能提高查询的性能。...,从而有效地优化查询,提高数据库的性能。

    28911

    MySQL数据库:SQL优化与索引优化

    union all select * from doc where status=2; (2)in:能够命中索引,查询优化耗费的 CPU 比 union all 多,但可以忽略不计 select...,or 查询优化耗费的 CPU 比 in 多 select * from doc where status = 1 or status = 2 对于上面三种关键词:union all 分两步执行,...11、使用union all 替换 union: 当SQL语句需要union两个查询结果集合时,这两个结果集合会以union all的方式被合并,然后再输出最终结果前进行排序。...如果用union all替代union,这样排序就不是不要了,效率就会因此得到提高.。需要注意的是,UNION ALL 将重复输出两个结果集合中相同记录。...将临时结果暂存在临时表,后面的查询就在临时表中查询了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。但是,对于一次性事件,较好使用导出表。

    1.4K20

    索引合并Intersection、union (3)--单表访问方法(三十八)

    虽然读取多个二级索引比读取一个二级索引消耗性能,但是读取二级索引的时候是顺序I/O,而回表操作是随机I/O,而且读取一个二级索引,回表的记录特别多,这样也会降低性能,而取交集之后,回表的记录更少,获取数据的成本更低...Union合并 Union在两个表取出并集可以用上,但这里不是在两个表使用,意思是sql语句取并集: 情况一,二级索引是等值匹配,联合索引必须每个列的值都等值匹配,不能只匹配部分列。...c'); SELECT * FROM single_table WHERE key1 = 'a' OR key_part1 = 'a'; 这两个sql就不可以用union查询,原因是二级索引不能范围查询和联合索引必须所有列都在...而前者使用场景是单独根据搜索条件从二级索引中获取的记录太多,排序成本太高。...总结:当二级索引两个列不是联合索引但是在一起查询的时候,有机会触发intersection合并查询和union查询。

    62530

    数据库查询优化的一般步骤_sql创建数据库失败

    大家好,又见面了,我是你们的朋友全栈君。 0、序言 本文我们来谈谈项目中常用的 20 条 MySQL 优化方法,效率至少提高 3倍!...很多时候都会使用 IN 进行替代,或者使用 union all 或者是 union(必要的时候)的方式来代替“or”也会得到更好的效果。...15、尽量用union all代替union union 和 union all 的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。...当然,union all 的前提条件是两个结果集没有重复数据。 16、减少与数据库交互 尽量采用批量 SQL 语句,减少与数据库交互次数。...关注软件本身的优化同时,也需要关注硬件的性能指标和优化,以及硬件的发展方向。MySQL 属于 IO 密集型的应用,对存储硬件的 IO 性能要求比较高,在高并发的场景中,建议使用 PCI-e。

    1.2K20

    19条mysql优化mark下

    很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果 七、尽量用union all代替union union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作...当然,union all的前提条件是两个结果集没有重复数据。...sql语句相当于 select * from 表A where exists(select * from 表B where 表B.id=表A.id) 区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键... A表 Left join B表 on where a.id = b.id where b.id is null 十、使用合理的分页方式以提高分页的效率 select id,name from table_name...,可以用以下方式来解决 select * from A left join B on B.name = A.name where B.name is null union all select * from

    70900

    工作中数据库优化技巧

    UNION, UNION 中的第二个或后面的查询语句, 取决于外面的查询 UNION RESULT, UNION 的结果 SUBQUERY, 子查询中的第一个 SELECT DEPENDENT SUBQUERY...因此这样的情况下, type 的值是 index, 并且 Extra 的值是 Using index. ALL: 表示全表扫描, 这个类型的查询是性能最差的查询之一....很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果 七、尽量用union all代替union union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作...当然,union all的前提条件是两个结果集没有重复数据。...A表 Left join B表 on where a.id = b.id where b.id is null 取出的结果集如下图表示,A表不在B表中的数据 十、使用合理的分页方式以提高分页的效率 select

    775110

    最常问的MySQL面试题集合

    表存储在两个文件,MYD和MYI。 设计简单,某些场景下性能很好,例如获取整个表有多少条数据,性能很高。 全文索引不是很常用,不如使用外部的ElasticSearch或Lucene。...内连接(INNER JOIN) 外连接(LEFT JOIN/RIGHT JOIN) 联合查询(UNION与UNION ALL) 全连接(FULL JOIN) 交叉连接(CROSS JOIN) SELECT...联合查询(UNION与UNION ALL) SELECT * FROM A UNION SELECT * FROM B UNION ......就是把多个结果集集中在一起,UNION前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录行会合并 如果使用UNION ALL,不会合并重复的记录行 效率 UNION 高于 UNION ALL...如果使用UNION ALL,不会合并重复的记录行 效率 UNION 高于 UNION ALL 问题23:一个6亿的表a,一个3亿的表b,通过外键tid关联,你如何最快的查询出满足条件的第50000到第50200

    90530

    盘点 Sql 中几个比较实用的小 Tips!

    工作中,我们经常需要编写 SQL 脚本,对数据库进行增、删、改、查,很少会考虑到 Sql 性能优化 实际上,从性能角度考虑,有很多 Sql 关键字都有它们各自的使用场景;如果使用恰当,能大大地提升后端服务的响应效率...下面以 Mysql 为例,罗列出几个比较实用的小 Tips 2. union、union all、or union [all] 代表联合查询,即:将多个查询结果合并起来成一个结果并返回 PS:union...联合查询针对每一个查询结果,必须保证列数量、列数据类型及查询顺序一致 语法如下: # 以两张表的联合查询为例 # table_one:表一 # table_two:表二 # 表一中的查询字段:table_one_field1...... from table_two; 其中,union、union all、or 三者的区别如下: union 表链接后会利用字段的顺序进行排序,以此筛选掉重复的数据行,最后再返回结果 因此,当数据量很大时效率很低...union all 相比 union,union all 在表链接时不会删除重复的数据行,直接返回表联合后的结果 因此,union all 执行效率要高很多,在不需要去重和排序时,更推荐使用 union

    75020

    项目中至少提高3倍的19条MySQL优化

    很多时候使用union all或者是union(必要的时候)的方式来代替“or”会得到更好的效果。...7、尽量用union all代替union union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。...当然,union all的前提条件是两个结果集没有重复数据。...* from 表A where exists(select * from 表B where 表B.id=表A.id) 区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists...10、使用合理的分页方式以提高分页的效率 select id,name from product limit 866613, 20 使用上述SQL语句做分页的时候,可能有人会发现,随着表数据量的增加,直接使用

    61830

    MYSQL优化有理有据全分析(面试必备)

    3、 UNION表示连接查询的第2个或后面的查询语句。 ? 4、 DEPENDENT UNIONUNION中的第二个或后面的SELECT语句,取决于外面的查询。...5、 UNION RESULT连接查询的结果。 6、 SUBQUERY子查询中的第1个SELECT语句。 ?...使用OR关键字的查询 查询语句的查询条件中只有OR关键字,且OR前后的两个条件中的列都是索引时,索引才会生效,否则,索引不生效。 ? ? ?...因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。 增加中间表 对于需要经常联合查询的表,可以建立中间表以提高查询效率。...通过建立中间表,将需要通过联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询。

    1.3K30

    【MySQL】多表联合查询、连接查询、子查询「建议收藏」

    基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是代表相同的业务含义(如my_student.c_id和my_class.id) 当两个表中存在相同意义的字段的时候...其中union选项有两个选项可选 all:表示无论重复都输出 distinct: 去重(整个重复)(默认的) select *from addr union all select *from addr...; select id,addrid from addr union all select id,addrid from student; 联合查询只要求字段一样, 跟数据类型和顺序无关 select...id,addrid,sex,score from student union all select sex,addrid,id,score from student; 联合查询的意义:...联合查询order by的使用 在联合查询中: order by不能直接使用(不能出现两次),需要对查询语句使用括号才行; select *from student where sex="woman

    4.8K20
    领券