Home

MySQL查询性能优化(二)

在发现查询效率不高时,首先就需要考虑查询语句的设计是否合理。如下将会介绍一些查询优化技巧,然后在介绍一些MySQL优化器内部的机制,并展示MySQL是如何执行查询的。最后探索查询优化的模式,以帮助MySQL更有效地执行查询。 优化数据访问查询性能低下的最基本原因是访问的数据太多了。因此大部分的性能低下查询都可以通过减少访问的数据量进行优化。减少数据访问量通常意味着访问了太多的行,但有时也可能是访问

MySQL查询性能优化(一)

MySQL查询性能的优化涉及多个方面,其中包括库表结构、建立合理的索引、设计合理的查询。库表结构包括如何设计表之间的关联、表字段的数据类型等。这需要依据具体的场景进行设计。如下我们从数据库的索引和查询语句的设计两个角度介绍如何提高MySQL查询性能。 数据库索引索引是存储引擎中用于快速找到记录的一种数据结构。索引有多种分类方式: 按照存储方式可以分为:聚簇索引和非聚簇索引 按照数据的唯一性可以

一致性hash

一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。 因此引入了一致性hash算法 把数据用hash函数(如MD5),映

A给B转100元

在单应用或者传统的强一致解决方案中,A账户转给B账户100元,一个简单的事务就可以保证但是现今互联网界,分布式系统和微服务架构盛行,一个简单操作,在服务端非常可能是由多个服务和数据库实例协同完成的。在互联网金融等一致性要求较高的场景下,多个独立操作之间的一致性问题显得格外棘手。基于水平扩容能力和成本考虑,传统的强一致的解决方案(e.g.单机事务)纷纷被抛弃。其理论依据就是响当当的CAP原理。我们往

分布式事务-两阶-三阶段提交

分布式一致性回顾在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\查等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。 为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitm

锁在Java虚拟机中的实现和优化

理解锁在Java虚拟机中的实现和优化之前,我们需要知道对象头和锁的关系。在Java虚拟机的实现中每个对象都有一个对象头,用于保存对象的系统信息。对象头中有一个称为Mark Word的部分,它是实现锁的关键,在32位系统中,Mark Word为32个比特位,64位系统中,为64个比特位。它是一个多功能的数据区,可以存放对象的哈希值,对象的年龄,锁的指针等信息,一个对象是否占用锁,占用哪个锁,就记录在

MySQL锁机制总结

实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的RD

spring+rabbitmq+protobuf

好久没有用Java写过东西了,感觉都手生了。最近项目中需要用到rabbitmq作为消息队列,在各个模块和服务之间发送Protobuf类型的消息。这里记录一下简单的接入过程,以及碰到的坑。 RabbitMQ Mac上的简单安装1234brew install rabbitmq#启用RabbitMQ UI management: http://localhost:15672/usr/local/Cel

maven-shade-plugin解决包冲突问题

使用Maven做依赖包管理的时候,经常如下问题:A和B都依赖一个第三方库(分别是V1和V2), 但是V1和V2又是不兼容的,这个时候就很蛋疼了。比如Guava 1.2和1.8就是不兼容的。 这个时候可以用maven-shade-plugin将A或者B打成一个独立的jar包来解决。 maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 ja

排序去重

场景:对数组进行排序和去重java 8 stream实现12345List<String> list = Arrays.asList("EE", "AA","AA","BB");list.stream() .distinct() .sorted() .forEach(x -> System.out.println(x)); 二叉树实现思路