MySQL索引及查询优化

1. MySQL索引的原理

1.1 索引目的

索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?

1.2 索引原理

除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。

每个数据表都有一个主键(如果没有主键......

undertow core

XNIO

undertow 是以XNIO为实现核心。XNIO有两个核心概念:

Channel

Channel,是传输管道的抽象概念,在NIO的Channel上进行的扩展加强,使用ChannelListener API进行事件通知。在创建Channel时,就赋予IO线程,用于执行所有的ChannelListener回调方法。

IOWorker

区分IO线程和工作线程,创建一个工作线程池可以用来执行阻塞任务。一般情况下,非阻塞的Handler由IO线程执行,而阻塞任务比如Servlet则被调度到工作线程池执行。这样就很好的区分了阻塞和非阻塞的两种情形。

WORKER......

乐观锁(Optimistic Locking)与悲观锁(Pessimistic Locking)

问题

首先来看看问题。数据表ATable结构如下

CREATE TABLE `FUN_Product` (

`ID` int(11) NOT NULL COMMENT '主键',

`Value` int(11) DEFAULT '0' COMMENT '对应产品引用ID' )

现在用户UserA和UserB要同时更新表中的同一条记录,可能会出现如下的流程:

JVM学习笔记

这是学习「深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)」时记录的笔记,共享出来。

图片可以直接下载:下载地址。

运行时数据区

程序计数器(ProgramCounter Register)

每个线程都有独立的程序计数器

一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器

虚拟机栈(VM Stack)

线程私有,生命周期与线程相同

每个方法执行时都会创建......

undertow介绍

undertow提供了blocking和non-blocking两种api,灵活高性能的服务器框架。

特点

轻量级

嵌入式

灵活

支持Websocket

支持Servlet 3.1

支持HTTP2

Demo code

public class HelloWorldServer {

public static void main(final String[] args) {

Undertow server = Undertow.builder()

.addHttpListener(8080, "localhos......