Myisam引擎和InnoDb引擎的区别
最近闲来无事,看了下面试题目,看到mysql数据表的引擎模块,目前我们用的比较多的引擎应该是innodb和myisam,其他的引擎暂时抛开不谈,我们先来看看这两个数据表引擎有哪些异同:
纸上得来终觉浅,绝知此事要躬行,所以自己做了个实验,发现MyISAM引擎的表批量插入要优于Innodb
package com.sushi.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class MyJDBC {
private static Connection conn = null;
private static PreparedStatement st = null;
private static final int COUNT = 1000;//条数
static{
try {
conn = JDBCUtils.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
//myisam测试
long start = System.currentTimeMillis();
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
addDataByTableName("person_myisam");
}
});
thread1.start();
thread1.join();
long ended = System.currentTimeMillis();
System.out.println("myisam:"+(ended - start));
//innodb测试
start = System.currentTimeMillis();
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
addDataByTableName("person_innodb");
}
});
thread2.start();
thread2.join();
ended = System.currentTimeMillis();
System.out.println("innodb:"+(ended - start));
}
public static void addDataByTableName(String tableName){
try {
for(int i=0;i<COUNT;i++){
// 编写sql
String sql = "insert into "+tableName+"(name,age,address) values (?,?,?)";
// 创建语句执行者
st= conn.prepareStatement(sql);
//设置参数
st.setString(1, "曾昌"+i);
st.setInt(2, i+10);
st.setString(3, "孝感"+i);
// 执行sql
st.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
下面是输出结果:
可以看出myiasm插入一千条数据大概需要7000毫秒左右,而innodb大概需要9000多毫秒
另外附上表结构(两张表结构一样,数据库引擎一个是myiasm,一个是innodb)
jdbc工具类也附上:
package com.sushi.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class JDBCUtils {
private static String driver="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://192.168.18.5:3306/mydb";
private static String user="root";
private static String password="toor";
private JDBCUtils(){}
static {
/**
* 驱动注册
*/
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* 获取 Connetion
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param conn
* @param st
* @param rs
*/
public static void colseResource(Connection conn,Statement st,ResultSet rs) {
closeResultSet(rs);
closeStatement(st);
closeConnection(conn);
}
/**
* 释放连接 Connection
* @param conn
*/
public static void closeConnection(Connection conn) {
if(conn !=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//等待垃圾回收
conn = null;
}
/**
* 释放语句执行者 Statement
* @param st
*/
public static void closeStatement(Statement st) {
if(st !=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//等待垃圾回收
st = null;
}
/**
* 释放结果集 ResultSet
* @param rs
*/
public static void closeResultSet(ResultSet rs) {
if(rs !=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//等待垃圾回收
rs = null;
}
}
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
phinx数据库脚本迁移环境配置
phinx数据库脚本迁移环境配置 环境: Phinx一个重要功能就是支持多个数据库环境。可以在本地开发环境使用迁移脚本,同样的脚本也可以在线上环境使用。环境数据在 dev下 environments: default_migration_table: phinxlog default_database: development localhost: adapter: mysql host: localhost name: dev user: root pass: 'root' port: 3306 charset: utf8 dev: adapter: mysql host: dev name: production_db user: root pass: '' port: 3306 charset: utf8 collation: utf8_unicode_ci phinx环境的配置文件在你的项目根目录下: 当你执行脚本命令对localhost数据库进行操作的时候: php vendor/robmorgan/phinx/bin/phinx migrate -e localhost 当...
- 下一篇
浅谈OpenStack平台的安全问题及措施
OpenStack的优势与劣势 Openstack具有三大特点:免费开源、强大的兼容性以及开放性。 Openstack 本身是一个开源、免费的软件,同商业软件相比它给了客户足够的自由度,可以在任何场合使用,Openstack开放源代码,让技术人员了解程序如何运作,由此可以自己进行调整。在云计算时代,存在平台与用户锁定的情况,而如果大家都采用开源的软件,迁移将变得容易。以虚拟化应用为例,OpenStack支持Xen、KVM、VMware和QEMU等虚拟机,并通过统一的虚拟层来调用,实现底层对用户透明。用户可通过其对现有虚拟化技术的支持实现OpenStack在不同场景的部署。而且,由于OpenStack使用一个框架标准和API,只要用户具备相应的技术能力,任何人都可以在OpenStack上自行建立和提供云端计算服务。 总而言之,OpenStack的推出解决了用户在开发、部署与交付云环境上的灵活性、弹性和低成本问题,大大改善了以往企业如果想实现云计算,就必须找Amazon和IBM等云计算厂商的窘境。 然而,OpenStack也存在如下一些劣势: 项目中面临的风险由于发展时间较短,还缺乏很多必...
相关文章
文章评论
共有0条评论来说两句吧...