
SQL优化
文章平均质量分 93
jerry-89
这个作者很懒,什么都没留下…
展开
-
数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接
日常开发中少不了各种可视化数据库管理工具。如果需要同时能连接多种数据库,大家肯定都会想到 DBeaver、Navicat Premium。本文介绍另一个十分好用且强大的工具:DataGrip。 DataGrip 是 JetBrains 公司推出的管理数据库的产品。对于 JetBrains 公司,开发者肯定都不陌生,IDEA 和 ReSharper 都是这个公司的产品,用户体验非常不错。 DataGrip 提供 Windows 版本和 macOS 版本,支持几乎所有主流的关系数据...转载 2022-04-01 14:17:20 · 5549 阅读 · 0 评论 -
MySQL key_len 大小的计算
MySQL key_len 大小的计算 背景: 当用Explain查看SQL的执行计划时,里面有列显示了key_len 的值,根据这个值可以判断索引的长度,在组合索引里面可以更清楚的了解到了哪部分字段使用到了索引。环境:CREATE TABLE `tmp_0612` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(11) DEFAULT NULL, `address` v...转载 2020-09-22 14:25:22 · 212 阅读 · 0 评论 -
Exists、 In 、Not Exists、Not In 区别和效率
Exists、 In 、Not Exists、Not In 区别和效率 Exists和in的基本工作原理就不说了可以看这篇博文:https://blog.youkuaiyun.com/qq_38238296/article/details/86601765关于exists和in的效率问题 很多博客上说in适用于外表大内表小的情况,exists适用于外表小内表大的情况如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询原创 2020-09-17 17:43:26 · 787 阅读 · 0 评论 -
MySQL去重操作优化
目录一、巧用索引与变量1. 无索引对比测试(1)使用相关子查询(2)使用表连接(3)使用变量2. 建立created_time和item_name上的联合索引对比测试(1)使用相关子查询(2)使用表连接(3)使用变量(4)使用变量,并且消除嵌套查询二、利用窗口函数三、多线程并行执行1. 数据分片(1)查询出4份数据的created_time边界值(2)查看每份数据的记录数,确认数据平均分布2. 建立查重的存储过程3. 并行执行(1)sh转载 2020-09-17 17:07:07 · 510 阅读 · 0 评论 -
同时有COUNT(DISTINCT)和GROUP BY的慢查询sql优化
项目中碰到一个慢查询,里面既有COUNT(DISTINCT),又有GROUP BY,查询性能很差,26万条数据查询下来需要18秒,sql如下 SELECT a.channel_code AS channelCode, a.channel_name AS channelName, DATE_FORMAT(a.create_date, '%Y') AS orderDate, COUNT(DISTINCT a.order_no) AS or...原创 2020-09-16 14:40:01 · 2021 阅读 · 1 评论 -
count(distinct())效率优化
如何提升自身sql效率,更快得到想要的数据,是每一个使用sql的同学都需要学习和关注的事情。sql作为面向大众的数据提取工具,除了研发、数据分析师,产品经理及业务运营同学也都有应用需求。只要sql无语法错误,保持等待,或长或短都是可以输出结果的。但是在数据量庞大或数据逻辑复杂时,或碰上线上资源紧张,或者好不容易等了3小时、结果发现数据有点异常需要修改后重跑,不知道有没有同学有相同的经历。低效是每位同学都不乐见的,而避免这个问题就要求我们学习优化sql的方法,从而减少自己等数的焦虑时光。而其中最常原创 2020-09-16 14:38:05 · 30811 阅读 · 4 评论 -
MySQL中SQL_CALC_FOUND_ROWS的用法
1. SQL_CALC_FOUND_ROWS简述在很多分页的程序中都这样写:#查出符合条件的记录总数SELECT COUNT(*) from [table] WHERE ......; #查询当页要显示的数据SELECT * FROM [table] WHERE ...... limit M,N; 但是从Mysql4.0.0开始,我们可以选择使用另外一个方式:SELECT SQL_CALC_FOUND_ROWS * FROM [table] WHERE ...... li原创 2020-09-08 14:55:31 · 1720 阅读 · 0 评论 -
MySQL 上亿大表优化实践
MySQL 上亿大表优化实践 目录背景 分析 select xxx_record语句 delete xxx_record语句 测试 实施 索引优化后 delete大表优化为小批量删除 总结背景XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来保证主从数据的一致性)XX实例的慢查询数量最多(执行时间超过1s的sql会被记录),XX应用那方每天晚上在做删除一个月..转载 2020-08-20 16:01:09 · 252 阅读 · 0 评论 -
MySQL 加锁和死锁解析
MySQL 加锁和死锁解析 目录产生死锁的必要条件 常规锁模式 锁的属性 锁组合(属性+模式) 锁冲突矩阵 锁是加在那里的? 操作与加锁的对照关系 Insert Delete Update GAP锁 那些操作会加GAP锁? 如何去掉GAP锁? 什么时候加next-key lock? Insert Intention Lock 总结产生死锁的必要条件多个并发事务(2个或者以上) 每个事物都持有了锁(或者是已经在等待锁) 每个..原创 2020-08-20 15:59:42 · 182 阅读 · 0 评论 -
MySQL 如何优化cpu消耗
MySQL 如何优化cpu消耗 目录谁在消耗cpu? 祸首是谁? 用户 IO等待 产生影响 如何减少CPU消耗? 减少等待 减少计算 减少逻辑运算量 减少逻辑IO量 减少query请求量(非数据库本身) 升级cpu 谁在消耗cpu?用户+系统+IO等待+软硬中断+空闲祸首是谁?用户用户空间CPU消耗,各种逻辑运算正在进行大量tps函数/排序/类型转化/逻辑IO访问...用户空间消耗大量cpu,产生的系..原创 2020-08-20 15:58:39 · 723 阅读 · 1 评论 -
将MySQL去重操作优化到极致
目录一、巧用索引与变量1. 无索引对比测试(1)使用相关子查询(2)使用表连接(3)使用变量2. 建立created_time和item_name上的联合索引对比测试(1)使用相关子查询(2)使用表连接(3)使用变量(4)使用变量,并且消除嵌套查询二、利用窗口函数三、多线程并行执行1. 数据分片(1)查询出4份数据的created_time边界值(2)查看每份数据的记录数,确认数据平均分布2. 建立查重的存储过程3. 并行执行(1)sh转载 2020-08-17 15:52:32 · 313 阅读 · 0 评论 -
MYSQL-SQL优化之-Left Join优化(10秒优化到20毫秒内)
结合工作中的内容和大家分享一次Left Jon优化的过程,希望能给同学们新的思路。【功能背景】我们需要按照用户订单号和商户号统计出购买的商品数量和售后的商品数量。涉及到的表和关系见下图:buyer_order(用户订单) seller_order(商户订单) 1 N seller_order(商户订单) seller_order_item(商户订单详情) 1 N seller_order(商户订单) seller_orde...原创 2020-08-12 15:16:23 · 10621 阅读 · 1 评论 -
LINUX ON MYSQL配置优化
1.禁止操作系统更新文件的atime属性atime是Linux/UNIX系统下的一个文件属性,每当读取文件时,操作系统都会将读操作时间回写到磁盘上。对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响I/O性能!因此,可以通过设置文件系统的mount熟悉,阻止操作系统写atime信息,减轻磁盘I/O负担。方法如下:(1)修改文件系统配置文件/etc/fstab,指定noatime选项:UUID=33958004-e8a7-4135-844f-707a5原创 2020-08-11 16:43:37 · 453 阅读 · 0 评论 -
MySQL批量更新数据总结
快速插入1亿条数据的方法# 新建库create database bigData;use bigData;#1 建表deptCREATE TABLE dept(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,dname VARCHAR...原创 2020-04-27 11:01:13 · 461 阅读 · 0 评论 -
哪些SQL执行比较频繁
研发经常会问到能看到哪些SQL执行比较频繁吗? 熟悉mysql的朋友应该都知道,error日志只记录数据库层的报错,binlog只记录增/删/改的记录,但是没记录谁执行,只记录执行用户名,slowlog虽然详细,但是只记录超过设定值的慢查询sql信息.只有general-log才是记录所有的操作日志,不过他会耗费数据库5%-10%的性能,所以一般没什么特别需要,大多数情况是不开的,...原创 2020-04-24 14:41:09 · 1401 阅读 · 0 评论 -
慢查询分析show profile 调优工具
show profile。也是 MySQL 服务自带的分析调优工具,不过这款更高级,比较接近底层硬件参数的调优。慢查询分析调优工具~show profile查看 show profile 设置show variables like 'profiling%';//默认关闭,保存近15次的运行结果慢查询分析调优工具~show profile开启set profili...原创 2020-04-13 11:24:06 · 347 阅读 · 0 评论 -
MySQL Tune
MySQL Tuner是一个Perl脚本,它连接到正在运行的MySQL实例,并根据工作负载提供配置建议。理想情况下,MySQL实例应该在运行脚本之前至少运行24小时。实例运行的时间越长,MySQL Tuner给出的建议就越好。github网址如下:https://github.com/major/MySQLTuner-perl代码提交还是比较活跃的,目前有4.3k个star由于这个...原创 2020-04-03 17:23:21 · 321 阅读 · 0 评论 -
MySQL---聚集函数的优化
函数说明AVG()返回某列的平均值COUNT()返回某列的行数MAX()返回某列的最大值MIN()返回某列的最小值SUM()返回某个列之和创建数据:CREATE TABLE t_key(id INT PRIMARY KEY, k1 INT NOT NULL UNIQUE KEY,k2 INT NULL, k3p1 INT, k3p2 INT, col INT NULL,KEY k1_idx_uqi...原创 2018-07-02 13:21:41 · 780 阅读 · 0 评论 -
SQL优化案例:相关子查询优化
原始语句: SELECT t1.* FROM t_payment_bank_account_info t1 WHERE EXISTS ( SELECT 1 FROM t_payment_account_dtl t2 WHERE t1.account_no = t2.account_n...原创 2018-07-31 20:48:27 · 2091 阅读 · 0 评论 -
NOT EXISTS优化
原始语句:SELECT *FROM dcf_account.t_posting_transaction t1WHERE NOT EXISTS ( SELECT * FROM dcf_loan.t_account_posting_detail t2 ...原创 2018-07-31 20:51:11 · 3942 阅读 · 0 评论 -
百万级数据库优化
项目说明 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 3、应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 ...原创 2018-07-31 21:46:27 · 611 阅读 · 0 评论 -
B树和B+树的插入、删除图文详解
1. B树1. B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1)每个结点最多有m-1个关键字。2)根结点最少可以只有1个关键字。3)非根结点至少有Math.ceil(m/2)-1个关键字。4)每个结点中的关...转载 2019-02-18 17:44:31 · 283 阅读 · 0 评论 -
MySQL中聚合函数count的使用和性能优化
本文将探讨以下问题1.count(*) 、 count(n)、count(null)与count(fieldName)2.distinct 与 count 连用3.group by (多个字段) 与 count 实现分组计数4.case when 语句与 count 连用实现按过滤计数一、 COUNT()作用count的基本作用是有两个:统计某个列的数据的数量(不统计NULL);统计结果集的行数;...原创 2018-07-02 11:36:27 · 3806 阅读 · 0 评论