注意:所有文章除特别说明外,转载请注明出处.
mysql优化 - trace分析
通过trace文件能够进一步了解为什么优化器选择A执行计划而不选择B执行计划,帮助我们更好的理解优化器是如何选择执行计划的。
注意:所有文章除特别说明外,转载请注明出处.
通过trace文件能够进一步了解为什么优化器选择A执行计划而不选择B执行计划,帮助我们更好的理解优化器是如何选择执行计划的。
注意:所有文章除特别说明外,转载请注明出处.
[TOC]
MySQL分区可以管理非常大的表,采用分而治之的逻辑,分区引入分区键概念,让数据根据规则分布在不同的分区中,让一个大对象变成一些小对象。
命令:show variables 查看当前MySQL是否支持分区
MySQL支持RANGE,LIST,HASH和KEY四种分区。其中,每个分区又都有一种特殊的类型。对于RANGE分区,有RANGE COLUMNS分区。对于LIST分区,有LIST COLUMNS分区。对于HASH分区,有LINEAR HASH分区。对于KEY分区,有LINEAR KEY分区。
注意:所有文章除特别说明外,转载请注明出处.
[TOC]
通过索引可以帮助我们解决大多数的SQL性能问题。
MySQL索引类比是一本书前面的目录,能加快数据库的查询速度。
在没有索引的情况下,数据库会遍历全部数据后选择符合条件的。而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。
注意:所有文章除特别说明外,转载请注明出处.
简单说就是存放数据的仓库,这个仓库按一定的数据结构(数据的组织形式、或数据之间的联系)来组织和存储的,数据库分为关系型数据库(Oracle,MySQL,SQLServer)和非关系型数据库(NOSQL,Memcaced,redis等)
MySQL实例是由线程和内存组成,它是真正用于操作数据库文件的,一般情况下一个实例操作一个或多个数据库,在实例启动的时候MySQL会读取配置文件,MySQL如果找不到配置文件则会按照默认参数设置启动实例
只要由多个查询需要在同一时刻修改数据,都会产生并发控制问题,解决方法:并发控制
注意:所有文章除特别说明外,转载请注明出处.
[TOC]
java.io中最为核心的一个概念是流(stream),面向流编程。Java中,一个流要么是输入流,要么是输出流,不可能同时既是输入流同时又是输出流。
java.nio中拥有3个核心概念:Selector、Channel和Buffer。在java.nio中,我们是面向块(block)或缓冲区(buffer)编程。Buffer本身就是一块内存,底层实现上实际是一个数组。数据的读写都是通过Buffer来实现。
Java中提供7种原生数据类型都各自对应的Buffer类型。如IntBuffer、LongBuffer、ByteBuffer及CharBuffer等。但是没有BooleanBuffer类型。
注意:所有文章除特别说明外,转载请注明出处.
[TOC]
1. rewrite功能比Nginx强大
2. 动态页面,Nginx处理动态请求是鸡肋,移动动态请求要Apache去做,Nginx只适合于静态和反向
3. 模块较于Nginx多
注意:所有文章除特别说明外,转载请注明出处.
[TOC]
官方定义,它是一个异步的,基于时间Client/Server的网络框架,目标是提供一种简单、快速构建网络应用的方式,同时保证高吞吐量、低延时、高可靠性。
提示:Netty其实就是一个NIO框架,它适用于服务器通讯相关的多种应用场景,主要还是针对于TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。
NIO,非阻塞IO,在JAVA中NIO的核心就是Selector机制。简单而言,创建一个Socket Channel,并将其注册到一个Selector上(多路复用器),这个Selector将会“关注”Channel上发生的IO读写事件,并在事件发生(数据就绪)后执行相关的处理逻辑。对于阻塞IO,它需要在read()、write()操作上阻塞而直到数据操作完毕,但是NIO则不需要,只有当Selector检测到此Channel上有事件时才会触发调用read、write操作。
注意:所有文章除特别说明外,转载请注明出处.
public static void main(String[] args) {
//设置连接为null
Connection connection = null;
//设置预处理状态为null
PreparedStatement preparedStatement = null;
//设置结果集为null
ResultSet resultSet = null;
//检查异常并抛出异常
try {
//1、加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2、通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
//3、定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
//4、获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1, "Aaron");
//6、向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//7、遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//8、释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
总结:1.JDBC在使用过程中数据库连接会频繁开启和关闭,会严重影响到数据库的性能。2.在程序中存在硬编码,数据库部分以及SQL执行部分。