在大量数据中进行查询,有无索引查询的速度效果测试
2017-11-17 16:43
513 查看
首先在JAVA程序中向数据库中进行数据的插入 ,因为要利用索引 ,少量的数据是不能够测试出索引的效果,所以要插入大量的数据进行测试,这次我们插入50万条记录
JAVA程序如下:建立一个表classfor,向其中录入50万条记录
package com.oracle.jdbc1.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestUpdate {
public static void main(String[] args) {
try {
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/for1703a", "root", "root");
Statement stat=conn.createStatement();
StringBuilder sb=new StringBuilder();
for(int i=0;i<500000;i++)
{
sb.append("("+(i+1)+",'wowo"+(i+1)+"',"+i+")");
if(i!=499999)
{
sb.append(",");
}
}
System.out.println(sb.toString());
int num=stat.executeUpdate("insert into classfor1(id,name,number) values "+sb.toString());
System.out.println(num);
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
首先进行无索引的测试:
以上是无索引等值查询,用时0.144ms;
以上是无索引范围查询,用时0.303ms;
接下来进行索引查询:这里有一个问题大家要注意,就是在选择索引方式的时候,要注意引擎的选择,因为有的引擎只支持一个索引方式,所以我选择了两个索引方式都兼容的MEMORY引擎,如下图:
我们首先测试BTERR索引方式进行查询:
BTREE索引方式下等值查找:用时0.001ms;
BTREE索引方式下范围查找:用时0.001ms;
接下来进行HASH索引方式查询:
HASH索引方式下的等值查询:用时0.001ms;
HASH索引方式下的范围查询:用时0.001ms;
根据数据显示,在几十万条记录乃至更多的数据中查询想要获得的结果时,利用索引查询是非常必要的,可以节省时间,提高一定的效率。
本人曾经在某博客中看到HASH和BTREE索引方式是不同的,HASH更适合等值查找,例如= 或者!=,不适合范围查询,而BTREE更适合范围查询,因为其没有HASH冲突。但是本次试验没有测试出两者的区别,我猜可能数据量还是不够,但是本人电脑太次,我插入50万条数据 程序就运行了十几分钟。再大的数据量我怕电脑会烧,本人只是一个初入门级的菜鸟,还请各位大佬对在下错误的地方多多批评,在下感激不尽。
JAVA程序如下:建立一个表classfor,向其中录入50万条记录
package com.oracle.jdbc1.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestUpdate {
public static void main(String[] args) {
try {
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/for1703a", "root", "root");
Statement stat=conn.createStatement();
StringBuilder sb=new StringBuilder();
for(int i=0;i<500000;i++)
{
sb.append("("+(i+1)+",'wowo"+(i+1)+"',"+i+")");
if(i!=499999)
{
sb.append(",");
}
}
System.out.println(sb.toString());
int num=stat.executeUpdate("insert into classfor1(id,name,number) values "+sb.toString());
System.out.println(num);
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
首先进行无索引的测试:
以上是无索引等值查询,用时0.144ms;
以上是无索引范围查询,用时0.303ms;
接下来进行索引查询:这里有一个问题大家要注意,就是在选择索引方式的时候,要注意引擎的选择,因为有的引擎只支持一个索引方式,所以我选择了两个索引方式都兼容的MEMORY引擎,如下图:
我们首先测试BTERR索引方式进行查询:
BTREE索引方式下等值查找:用时0.001ms;
BTREE索引方式下范围查找:用时0.001ms;
接下来进行HASH索引方式查询:
HASH索引方式下的等值查询:用时0.001ms;
HASH索引方式下的范围查询:用时0.001ms;
根据数据显示,在几十万条记录乃至更多的数据中查询想要获得的结果时,利用索引查询是非常必要的,可以节省时间,提高一定的效率。
本人曾经在某博客中看到HASH和BTREE索引方式是不同的,HASH更适合等值查找,例如= 或者!=,不适合范围查询,而BTREE更适合范围查询,因为其没有HASH冲突。但是本次试验没有测试出两者的区别,我猜可能数据量还是不够,但是本人电脑太次,我插入50万条数据 程序就运行了十几分钟。再大的数据量我怕电脑会烧,本人只是一个初入门级的菜鸟,还请各位大佬对在下错误的地方多多批评,在下感激不尽。
相关文章推荐
- Q:一个数据表中有大量数据,如何提高查询速度?
- mongdb性能压力测试,随机查询,数据量1亿条记录 操作系统centos6.4x64位 从测试结果看,当mongodb将数据全部载入到内存后,查询速度根据文档的大小,性能瓶颈通常会是在网络流
- oracle采用分区表+字段索引测试存储大量数据
- MySQL 千万 级数据量根据(索引)优化 查询 速度
- 对于Mysql大量数据查询速度慢的问题
- 添加索引后新数据查询速度慢,老数据速度快什么原因? ...
- 表主键排序和离散数据查询的速度测试
- mysql百万级数据量根据索引优化查询速度
- solr测试项目(下)--索引数据与查询
- 表主键排序和离散数据查询的速度测试
- java使用JDBC连接数据库,提高查询大量数据速度
- mysql千万级数据量根据索引优化查询速度
- 对于百万条数据进行查询:自己对2万条数据进行的测试,答案是。。。
- mysql千万级数据量根据索引优化查询速度
- mysql千万级数据量根据(索引)优化查询速度
- 大量数据多表联合查询时时, 使用视图,是不是比直接查询速度要快! 有高手请给讲讲,如何提高查询速度
- mysql千万级数据量根据索引优化查询速度
- mongodb nosql 大数据提高查询速度-索引
- mysql千万级数据量根据索引优化查询速度
- 教你用plsql建立索引加快查询oracle数据的速度