![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DataBase
文章平均质量分 65
bruce128
https://github.com/bruce256?tab=repositories
展开
-
mysql join语句优化实战
生产环境的大表join语句性能经常很差。这里给出大表join语句的优化思路。原创 2023-09-28 10:45:09 · 206 阅读 · 0 评论 -
redis cluster集群搭建
然后copy到其他文件夹,记得改端口号,还有cluster-config-file的值,这个值不能重,必须唯一,否则无法启动。依然是3个主节点,但是7001已经失联,8002从slave变成了master。–cluster-replicas 1表示每个master一个slave。7001文件夹创建配置文件redis.conf。先停掉一个master 7001。启动6个独立的redis实例。确认是否全部启动成功。原创 2023-09-07 20:26:24 · 625 阅读 · 0 评论 -
InnoDB底层存储结构探秘
B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树1)有n棵子树的节点中含有n个关键字(即每个关键字对应一棵子树);2)所有叶子节点中包含了全部关键字的信息, 及指向含这些关键字记录的指针,且叶子节点本身依关键字的大小自小而大顺序链接;3)所有的非终端节点可以看成是索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字4)除根节点外,其他所有节点中所含关键字的个数必须>=⌈m/2⌉(注意:B-树是除根以外的所有非终端节点至少有⌈m/2⌉棵子树)上图是所示为一棵3阶的。原创 2022-11-27 17:00:17 · 857 阅读 · 0 评论 -
Mybatis中用typehandler优雅的解决枚举类型的读写
表字段是码值的时候,一般会有一个枚举(enum)类对应。我们可以把DO类的对应字段定义为枚举类型,用mybatis的typehandler来处理读写。通过枚举类强管控码值的变化,就不会随着时间的推移,代码的可读性和可维护性大大降低了。5 insert或者update的时候需要在字段后面带上typehandler。1 枚举字段类型定义, 我们的目标是直接把这个类型入库,并正确的读取出来。这样做之后,就只需要维护枚举类型,数据库字段和DO类的注释都不需要了。2 typehandler定义, 需要继承。原创 2022-08-19 17:35:52 · 573 阅读 · 0 评论 -
Mybatis只有接口没有实现类的原理
问题背景mybaits相对于Ibatis的一大区别就是,不用自己写接口实现类。Ibatis的实现类十几年来做着重复的工作,拼接statementId,然后执行sql。十分没有营养的代码。mybaits干脆不用手工写实现类了,框架帮我们完成了这件事情。实现原理mybatis使用了动态代理技术生成实现类。动态代理的具体手段有两种:jdk自带和cglib。对比jdk自带cglib...原创 2019-08-19 23:49:17 · 4580 阅读 · 0 评论 -
mysql大表更新sql的优化策略
问题sql背景:项目有6个表的要根据pid字段要写入对应的brand_id字段。但是这个其中有两个表是千万级别的。我的worker运行之后,线上的mysql主从同步立刻延迟了!运行了一个多小时之后,居然延迟到了40分钟,而且只更新了十几万行数据。问题sql如下:<!-- 根据商品id更新品牌id --><update id="updateBrandIdByPid" pa...原创 2013-12-19 21:38:42 · 16430 阅读 · 4 评论 -
spring+ibatis框架下事务代码的编写示例
最近在做项目的账号管理这一块儿的功能。每一项账号操作相关的功能,都要涉及到多张表的读写。这个时候自然联想到用数据库的事务进行操作。否则,一处发生异常,将导致脏数据的产生。 ibatis+spring框架下事务的代码写法有两种方式:注解方式和声明事务起始点。 需要的spring的配置文件如下:<bean id="transactionManager" class="org...原创 2014-04-04 18:53:16 · 5914 阅读 · 0 评论 -
利用 force index优化sql语句性能
今天写了一个统计sql,在一个近亿条数据的表上执行,200s都查不出结果。SQL如下:select customer,count(1) cfrom upv_**where created between "2015-07-06" and "2015-07-07"group by customer having c > 20order by c desc 执行expl...原创 2015-07-06 18:32:34 · 39607 阅读 · 10 评论 -
无法在同一张表上查询和更新的问题解决方法
问题引入要在一张已存在并且有数据的表上建一个唯一索引,由于建索引的这列有很多重复的数据,导致无法建unique索引!要一条条数据手工删除吗?不!我是工程师,我要用技术的手段删除重复数据。写了一个删除重复数据的sql,如下: delete from entity_tag where id not in (select max(id) fr原创 2016-07-30 16:09:16 · 2557 阅读 · 3 评论 -
SQL去重的办法
做会话统计报表的时候,需要对pin去重,存在这样的情况,相同的pin存在不同的技能组。如果在java代码里去重,有多种方法 1,排序后一趟遍历,注意收尾工作。 2,哈希法,简单的做法是重写hashcode()方法,然后把所有的对象纳入hashSet, 3,暴力枚举,复杂度是O(n^2) 4,覆盖equal()方法,然后把所有的对象纳入tree原创 2013-02-25 18:13:48 · 7737 阅读 · 0 评论 -
字符串的公共前缀对Mysql B+树查询影响回溯分析
年前项目组接微信公众号。上线之后,跟微信相关的用cid列的查询会话的SQL变慢了几十倍!思考这个问题思考了很久,从出现以来一直是我心头的一个结。cid这一列是建了索引的,普通的cid列更新都没问题,为何只有微信的有问题?相同的前缀又是如何影响索引的? 分析过程 1.explain下微信cid的查询,微信的cid会以mid-qqwanggou001为前缀插入数据...原创 2016-03-15 09:39:30 · 5429 阅读 · 10 评论 -
java线程阻塞问题排查方法
我开发的worker,每隔几个月线上都会阻塞一次,一直都没查出问题。今天终于了了这个心结。把解决过程总结下和大家分享。 首先用jstack命令打出这个进程的全部线程堆栈。拿到线程dump文件之后,搜索自己的worker名字。"DefaultQuartzScheduler_Worker-10" prio=10 tid=0x00007f55cd54d800 nid=0x3e2e wait原创 2015-08-10 18:41:08 · 45180 阅读 · 9 评论 -
mysql error code '1064' 排查过程
下午自测代码,在这个update上卡了一个半小时,大大的降低了开发的生产力,把排查过程发出来,好的士兵不会掉进同一个陷阱。先把异常堆栈打出来。2016-03-28 17:23:38.420 main DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory:463] - Finished creati原创 2016-03-28 18:02:59 · 33025 阅读 · 3 评论 -
多mysql实例下开发需要注意主从同步延迟
今天晚上服务器上线测试,遇到了一个问题!往数据库写了一条数据之后,再读取该记录,居然读不出来,报空指针。十分费解,喊来开发组长定位问题。他的解释是:写操作用的是主库,而读操作用的是从库。在写库写完之后,该条记录并不会立刻出现在读库,数据同步到写库需要一定的时间。于是出现了我的空指针异常。回来看了很多网上的介绍主从同步机制。大致是这样的,主库执行完sql写命令之后,将日志写至binlog。从原创 2013-10-29 17:05:31 · 1747 阅读 · 0 评论 -
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
用XAMPP装装好mysql之后,mysql -uroot 连不上,报这个错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 在mysql的配置文件里,/opt/lampp/etc/my.cnf, 发现了这样的配置:# The原创 2013-05-11 13:08:31 · 2645 阅读 · 0 评论 -
对mysql time_to_sec()函数的误解
time_to_sec()函数仅仅计算了时间部分的秒数,没有把年月日的秒数计算进去。因为这个特点,导致了我程序的一个bug。 这段代码本来想统计客服的响应时间。但是碰到这种极品数据的时候,例如, responseTime:2013-1-8 00:00:01 ,firstMsgTime: 2013-1-7 23:59:50,程序就返回负数了。 SELECT service as pi原创 2013-01-08 20:03:23 · 12975 阅读 · 0 评论 -
MySql主从复制配置示例
最近研究mysql,从oracle官网下了一个最新的5.6的mysql,压缩版的。今天尝试一下Mysql的复制功能,花了好久才整出来,把心得分享出来。 用的是我们开发用的库,部署在测试环境,测试环境的mysql版本居然是5.1的。 1.主服务器配置 cd /etc,找到my.cnf,然后再这个配置文件加上复制要用的配置server-id = 1lo原创 2015-08-28 19:08:57 · 886 阅读 · 0 评论 -
多表查询的优化
开发的时候遇到了一个数据库查询性能的问题。输出每个查询的时间耗费之后发现,我的一个多表连接查询耗费了很多的时间。网上搜了一下性能优化的办法,大部分的方案是在表的连接字段建索引。 我的三表连接查询语句: SELECT count(DISTINCT(c.pin)) as cntFROM server_jd as a, server_jd_org as b原创 2012-09-27 11:45:02 · 3371 阅读 · 2 评论