一、前言
以前的
系统更复杂,因为表的设计(多个表,表和表有直接和下属的关系),这是由业务逻辑确定。插入效率简直无法忍受,必须
优化。在理解的
复制,Postgre未表的特点
在那之后,我们决定找出答案。
两。测试用例
1。表结构:表代表员工的
工作绩效(work_test):共15场
ID,不,
名字,性别,电话,
地址,省,市,邮政,移动,部门工作。
索引(聚簇索引B树或聚集索引):ID,不,名字,性别,电话,地址,省、市邮政、移动、部。
2。测试环境:win7,四
核心,2GB
内存;Postgre 9.3版;npgsql
连接到Postgre数据库。
三、插入 / / /未复制的事务表
1.insert 10W的数据可能需要120s,虽然有了很大的提高,但仍不能令人满意。
发现交易能显著提高
性能时使用SQLite,所以它被发现在Postgre它没有明显变化。
我不知道为什么。
2。复制可以将
文件中的数据(CSV)复制到数据库中。当然,数据表的结构和数据
类型应该与文件一一对应,可以大大提高插入性能。
复制代码代码如下所示:
copy'work_test'from'c:
温度。csv分隔符,
U3000 U3000
在使用复制后,发现插入性能提高到30秒,相当于3300个记录的1s插入,中间也包含生成CSV文件的时间。
3.unlogged表
未记录的表格,网上的文章说它可以比插入的10倍。使用
方法也很简单:
创建记录表…
但未记录的表格将失去所有之后重新
启动服务器异常Postgre的数据,所以如果你的数据是不允许失败,不使用它。
使用后发现,大约有20个和1个被插入到5000个记录中。
以下是三种刀片的发展趋势:
描述:X轴表示数据库中的记录数、单位数以百万计,每个点是一个10W,Y轴表示消耗每插入时间,单位秒。
蓝线:插入;为什么后面是稳定的,
计算机不
运行其他
程序。因此,计算机的工作状态对Postgre效率有一定的
影响。
粉红色:复制;
黄线:复制+无
虽然索引已经建立,表中的数据已经积累,但它对后续插入数据的性能没有影响。这个结果是我想要看到的。
四、
查询测试
按名称字段
搜索:
复制代码代码如下所示:
SELECT * FROM work_test name =‘
描述:X轴表示在数据库中,记录的数量单位万,每个点是10W,Y轴代表了每个查询的时间,单位毫秒。
蓝线:插入;
粉红色:复制;
黄线:复制+无
由于三种插入的结果
都是一样的,对比是没有意义的,这主要是看时间,平均500ms,随着行数的增加,查询效率不下降。这主要是由于良好的指标。
还发现,
条件越多,查询效率就越高,因为扫描中的行数减少了,而下面的映射也没有发布。