几种常见的优化方法summulpeng

在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。

如果有不同意见,欢迎留言指正,一起学习!

type由上至下,效率越来越高

虽然上至下,效率越来越高,但是根据cost模型,假设有两个索引idx1(a, b, c),idx2(a, c),SQL为select * from t where a = 1 and b in (1, 2) order by c;如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时,会用idx1,否则会用idx2

Extra

默认是关闭的,开启语句“set profiling = 1;”

trace分析优化器如何选择执行计划,通过trace文件能够进一步了解为什么优惠券选择A执行计划而不选择B执行计划。

优化索引

改用其他实现方式:ES、数仓等

数据碎片处理

索引

SQL语句

查询匹配从左往右匹配,要使用order_no走索引,必须查询条件携带shop_id或者索引(shop_id,order_no)调换前后顺序

索引

SQL语句

隐式转换相当于在索引上做运算,会让索引失效。mobile是字符类型,使用了数字,应该使用字符串匹配,否则MySQL会用到隐式替换,导致索引失效。

索引

SQL语句

对于大分页的场景,可以优先让产品优化需求,如果没有优化的,有如下两种优化方式,一种是把上一次的最后一条数据,也即上面的c传过来,然后做“c < xxx”处理,但是这种一般需要改接口协议,并不一定可行。另一种是采用延迟关联的方式进行处理,减少SQL回表,但是要记得索引需要完全覆盖才有效果,SQL改动如下

索引

SQL语句

in查询在MySQL底层是通过n*m的方式去搜索,类似union,但是效率比union高。in查询在进行cost代价计算时(代价 = 元组数 * IO平均值),是通过将in包含的数值,一条条去查询获取元组数的,因此这个计算过程会比较的慢,所以MySQL设置了个临界值(eq_range_index_dive_limit),5.6之后超过这个临界值后该列的cost就不参与计算了。因此会导致执行计划选择不准确。默认是200,即in条件超过了200个数据,会导致in的代价计算存在问题,可能会导致Mysql选择的索引不准确。

处理方式,可以(order_status, created_at)互换前后顺序,并且调整SQL为延迟关联。

索引

SQL语句

范围查询还有“IN、between”

在索引上,避免使用NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等

如果要求访问的数据量很小,则优化器还是会选择辅助索引,但是当访问的数据占整个表中数据的蛮大一部分时(一般是20%左右),优化器会选择通过聚集索引来查找数据。

查询出所有未支付的订单,一般这种订单是很少的,即使建了索引,也没法使用索引。

如果是统计某些数据,可能改用数仓进行解决;如果是业务上就有那么复杂的查询,可能就不建议继续走SQL了,而是采用其他的方式进行解决,比如使用ES等进行解决。

desc 和asc混用时会导致索引失效

对于推送业务的数据存储,可能数据量会很大,如果在方案的选择上,最终选择存储在MySQL上,并且做7天等有效期的保存。那么需要注意,频繁的清理数据,会照成数据碎片,需要联系DBA进行数据碎片处理。

THE END
0.SQL优化的15个小技巧,纯干货分享!本文通过100万条数据在MySQL上的测试,详细介绍了15种SQL优化方法,包括避免使用SELECT*,慎用UNION,小表驱动大表,以及LIKE语句、索引使用等优化策略,旨在提升SQL查询效率。 前言:这次准备了100W的数据进行SQL性能测试,数据库采用的是MySQL,总共介绍了常见的15种SQL优化方式,每一种优化方式都进行了实打实的测试,逐行讲解,jvzquC41dnuh0lxfp0tfv8MLYa8458ftvkimg8igvcomu86538977>7
1.mysqlSQL优化15种方法mysqlsql优化文章介绍了进行SQL优化的15种方法,包括避免使用select*,用unionall替代union,小表驱动大表策略,批量操作以减少数据库请求,多使用limit进行分页,控制IN操作中的值数量,以及优化分页和索引使用等,以提高SQL查询效率和程序性能。 该文章已生成可运行项目,预览并下载项目源码 jvzquC41dnuh0lxfp0tfv8|gkzooa=865382:8ftvkimg8igvcomu864;68:4A<
2.SQL优化常用的15种方法(SQL优化方法)数据库博客SQL的性能优化是数据库管理的重要任务,尤其是在处理大数据量的情况下,优化策略的合理使用能显著提高处理数据效率。本文将介绍SQL优化常用的15种方法,帮助开发者和管理人员改良数据管理的策略。 1方法1:使用合适的索引 索引优化是SQL优化的核心之一。为常用的查询字段创建索引,可以大幅提升查询速度。常用的索引类型包括唯一jvzquC41qrko0xhgcphbun3eqo5cnxl13:8429=;238
3.老司机总结的12条SQL优化方案(非常实用)腾讯云开发者社区(3)解析器/分析器: 分析器的工作主要是对要执行的SQL语句进行词法解析、语法解析,最终得到抽象语法树,然后再使用预处理器对抽象语法树进行语义校验,判断抽象语法树中的表是否存在,如果存在的话,在接着判断select投影列字段是否在表中存在等。 (4)优化器: 主要将SQL经过词法解析、语法解析后得到的语法树,通过数据jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk0497897?
4.sql优化常用的几种方法SQL问题:常用的 SQL 优化方法有哪些? 答案:常用的 SQL 优化方法包括以下几种: 1. 索引优化 创建适当的索引以加速查询,减少表扫描。 删除不必要的索引以提高性能。 2. 查询优化 使用正确的查询类型(如 SELECT、INSERT、UPDATE)。 使用适当的 JOIN 条件。 jvzquC41yy}/rqu0ep5gcz4:57<8;7mvon
5.15个SQL优化的技巧sql优化常用的15种方法15个SQL优化的技巧 本文介绍了SQL查询性能优化的16条建议,包括不使用select *、用union all代替union、小表驱动大表、批量操作、多用limit等。还提及索引优化、字段类型选择、group by效率提升等方面,同时指出MySQL反向查询的索引使用问题。 1.不要使用select*,要使用 select 指定列jvzquC41dnuh0lxfp0tfv8z235<37<581cxuklqg1fkucrqu13976;746:
6.SQL优化还不会?速来掌握这15个小技巧本文详细介绍了15种优化SQL语句的方法,包括避免使用`select*`、用`unionall`代替`union`、小表驱动大表、批量操作、合理使用`limit`、优化`in`和`exists`、控制索引数量、字段类型选择、提升`groupby`效率以及索引优化。这些技巧有助于提高数据库查询性能,解决线上接口性能问题。 jvzquC41dnuh0lxfp0tfv8hz{ztcv4ctvodnn4fgvgjn|4358<33B:5
7.SQL性能优化的47个小技巧,果断收藏!腾讯云开发者社区了解了MySQL的执行过程,我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器; 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据; 未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL解析器将使用MySQL语法进行验证和解析。例如,验证是否使用了错误的关键字,或者关键jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk04<6;3;:
8.SQL优化核心思想第8章讲解各种优化技巧,其中涵盖分页语句优化思想、分析函数减少表扫描次数、超大表与超大表关联优化方法、dblink优化思路,以及大表的rowid切片优化技巧。掌握这些调优技巧往往能够事半功倍。 第9章分享在SQL优化实战中遇到的经典案例,读者可以在欣赏SQL优化案例的同时学习罗老师多年专职SQL优化的经验,同时学到很多具有实战jvzquC41yy}/gyzdkv4dqv4dqqqEg}fknuEjfFS389;8
9.30种SQL语句优化的方法汇总Mysql30种SQL语句优化的方法汇总 这篇文章从30个方面,分享了sql优化的一些小技巧,希望对你有所帮助,需要的朋友可以参考下 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! 【如果你想靠AI翻身,你先需要一个靠谱的工具!】 1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立jvzquC41yy}/lk:30pku1jwvkerf1;;67;;/j}r
10.MySQL数据库优化的八种方式(经典必看)腾讯云开发者社区事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。 5、锁定表 尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk049>2:6?
11.常见的SQL优化面试专题大全数据库其它总结 到此这篇关于常见的SQL优化面试专题的文章就介绍到这了,更多相关SQL优化面试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 您可能感兴趣的文章: MYSQL 优化常用方法 MYSQL性能优化分享(分库分表) MySQL 索引分析和优化 面试中常常被问到sql优化的几种方案微信jvzquC41yy}/lk:30pku1jwvkerf1;<8;9>/j}r
12.SQL语句优化方法30例(推荐)MsSql在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法,提供效率。 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! 【如果你想靠AI翻身,你先需要一个靠谱的工具!】 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最 jvzquC41yy}/lk:30pku1jwvkerf1;99:94ivv
13.Hive/HiveSQL常用优化方法全面总结腾讯云开发者社区join优化是一个复杂的话题,下面先说5点最基本的注意事项。 build table(小表)前置 在最常见的hash join方法中,一般总有一张相对小的表和一张相对大的表,小表叫build table,大表叫probe table。如下图所示。 图来自http://hbasefly.com/2017/03/19/sparksql-basic-join/ jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk03=:568:
14.浅谈MySQL中优化sql语句查询常用的30种方法SpringMVCMaven浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用jvzquC41yy}/ewgnqiy/exr1o{hbvrx1r1?37<=830nuou
15.Oracle数据库管理与优化且所有的归档日志都有,现控制文件全部损坏,其他文件全部完好,请问该怎么恢复该数据库,说一两种方法。 14,用rman写一个备份语句:备份表空间TSB,level 为2的增量备份。 15,有个表a(x number(20),y number(20))用最快速高效的SQL向该表插入从1开始的连续的1000万记录。 jvzquC41dnuh0lxfp0tfv8UkpgGqruj21cxuklqg1fkucrqu15?29;:6
16.sql优化常用的几种方法(持续更新中)sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,总结一些方法如下: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: jvzquC41dnuh0lxfp0tfv8|jns{o|qz1ctzjeuj1fgzbkux132>69<;82