国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > PostgreSQL > 正文

Postgre數據庫Insert 、Query性能優化詳解

2020-01-31 15:23:30
字體:
來源:轉載
供稿:網友

一、前言
以前的系統由于表設計比較復雜(多張表,表與表直接有主從關系),這個是業務邏輯決定的。 插入效率簡直實在無法忍受,必須優化。在了解了Postgre的Copy,unlogged table 特性
之后,決定一探究竟。

二、測試用例

1.數據表結構:表示一個員工工作績效的表(work_test):共15個字段
id,no,name,sex,tel,address,provice,city,post,mobile,department,work,start_time,end_time,score
索引(b-tree的集群索引或者叫聚集索引):id,no,name,sex,tel,address,provice,city,post,mobile,department,work

2.測試環境:win7,四核,2GB內存;postgre版本9.3;Npgsql連接Postgre數據庫。

三、insert/ transaction/ copy/unlogged table

1.insert 一個10W數據大概需要120s,雖然已經提升“不少”,但是還是不盡如人意。以前用SQLite時發現Transaction可以大幅提升性能,于是在Postgre中試試,發現并沒有明顯變
化。不知何故。

2. copy可以將文件(csv)中的數據復制進數據庫中,當然數據表的結構和要數據類型要與文件一一對應。據說可以大幅提升插入性能。

復制代碼 代碼如下:

COPY 'work_test' from 'c:/temp.csv' WITH DELIMITER AS ','

  
使用Copy后發現插入的性能立馬提升至30s,相當于1s插入3300條記錄。這中間還包含生成csv文件的時間。

3.unlogged table
unlogged table,網上的文章說可以10倍于insert。使用方法也很簡單:Create unlogged table ...
但是unlogged table 在遇到Postgre服務器異常重啟后會丟失全部數據,所以如果你的數據不允許丟失,請不要使用。
使用后發現,大概20s,1s插入5000條記錄。

下面是三種插入方式的走勢圖:

說明:x軸表示數據庫中已有的記錄數,單位百萬,每個點是10W.Y軸表示每次插入所耗時間,單位秒。
藍色線:insert;之所以后面比較穩定是因為電腦沒有運行其他程序。所以說,電腦工作狀態對Postgre效率有一定的影響。
粉紅色:copy;
黃色線:copy+unlogged
 雖然建了索引,并且表中的數據一直累加進來,對于后續插入數據性能并沒有任何影響,這個結果就是我想看到的。

四、查詢測試
按name字段搜索:

復制代碼 代碼如下:

select * from work_test where name='1'




說明:x軸表示數據庫中已有的記錄數,單位百萬,每個點是10W.Y軸表示每次查詢所耗時間,單位毫秒。

藍色線:insert;
粉紅色:copy;
黃色線:copy+unlogged

由于三種插入方式結果都是一樣的,所以對比并沒有意義,這里主要看查詢耗時。平均下來:500ms,并且隨著Row count的增加,查詢效率并沒有降低。這主要得益于良好的索引。
另外發現:條件越多,查詢效率越高,因為掃描的行數在減少,后面的圖就不貼出來了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 黔东| 永登县| 宜黄县| 博罗县| 肃宁县| 衡东县| 万山特区| 西平县| 即墨市| 稷山县| 镇巴县| 阿坝县| 余姚市| 新化县| 蓬溪县| 游戏| 阳曲县| 石首市| 沅陵县| 张家界市| 柳林县| 买车| 喜德县| 青阳县| 绿春县| 靖江市| 衡水市| 万年县| 阳西县| 遵化市| 仁寿县| 休宁县| 同江市| 福贡县| 大理市| 那曲县| 乌鲁木齐市| 玉林市| 涞水县| 大足县| 二连浩特市|