postgresql 索引优化有可能在win下优化到一秒钟插入一万条记录吗

1580人阅读
数据库相关(9)
有以下几种方法用于优化数据的批量插入。
&& &1. 关闭自动提交:
&& &在批量插入数据时,如果每条数据都被自动提交,当中途出现系统故障时,不仅不能保障本次批量插入的数据一致性,而且由于有多次提交操作的发生,整个插入效率也会受到很大的打击。解决方法是,关闭系统的自动提交,并且在插入开始之前,显式的执行begin transaction命令,在全部插入操作完成之后再执行commit命令提交所有的插入操作。
&& &2. 使用COPY:
&& &使用COPY在一条命令里装载所有记录,而不是一系列的INSERT命令。COPY命令是为装载数量巨大的数据行优化过的,它不像INSERT命令那样灵活,但是在装载大量数据时,系统开销也要少很多。因为COPY是单条命令,因此在填充表的时候就没有必要关闭自动提交了。&
&& &3. 删除索引:
&& &如果你正在装载一个新创建的表,最快的方法是创建表,用COPY批量装载,然后创建表需要的任何索引。因为在已存在数据的表上创建索引比维护逐行增加要快。当然在缺少索引期间,其它有关该表的查询操作的性能将会受到一定的影响,唯一性约束也有可能遭到破坏。
&& &4. 删除外键约束:
&& &和索引一样,&批量地&检查外键约束比一行行检查更加高效。因此,我们可以先删除外键约束,装载数据,然后再重建约束。
&& &5. 增大maintenance_work_mem:
&& &在装载大量数据时,临时增大maintenance_work_mem系统变量的值可以改进性能。这个系统参数可以提高CREATE INDEX命令和ALTER TABLE ADD FOREIGN KEY命令的执行效率,但是它不会对COPY操作本身产生多大的影响。
&& &6. 增大checkpoint_segments:
&& &临时增大checkpoint_segments系统变量的值也可以提高大量数据装载的效率。这是因为在向PostgreSQL装载大量数据时,将会导致检查点操作(由系统变量checkpoint_timeout声明)比平时更加频繁的发生。在每次检查点发生时,所有的脏数据都必须flush到磁盘上。通过提高checkpoint_segments变量的值,可以有效的减少检查点的数目。
&& &7. 事后运行ANALYZE:
&& &在增加或者更新了大量数据之后,应该立即运行ANALYZE命令,这样可以保证规划器得到基于该表的最新数据统计。换句话说,如果没有统计数据或者统计数据太过陈旧,那么规划器很可能会选择一个较差的查询规划,从而导致查询效率过于低下。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:106995次
积分:1665
积分:1665
排名:第19588名
原创:57篇
转载:37篇
(1)(1)(2)(1)(1)(10)(3)(6)(3)(5)(1)(1)(2)(7)(2)(4)(2)(2)(2)(3)(5)(6)(9)(10)(2)(2)(1)在windows下手动初始化PostgreSQL数据库教程
环境:win7 64 sp1
1、创建用户postgres,密码同样是postgres:
net user postgres postgres /add
2、在数据库根目录下建立data目录:
C:\Program Files\PostgreSQL\9.3&md data
3、去掉administrator对data目录的权限:
C:\Program Files\PostgreSQL\9.3&cacls data /e /t /r administrator
处理的目录: C:\Program Files\PostgreSQL\9.3\data
4、将data目录的权限赋给postgres用户:
C:\Program Files\PostgreSQL\9.3&cacls data /e /t /g postgres:C
处理的目录: C:\Program Files\PostgreSQL\9.3\data
5、用postgres用户打开cmd
C:\Program Files\PostgreSQL\9.3&runas /user:postgres cmd.exe
输入 postgres 的密码:
试图将 cmd.exe 作为用户 "SURE-PC\postgres" 启动...
6、进行初始化,初始化用户为postgres,字符集为utf8,locale为C:
C:\Program Files\PostgreSQL\9.3\bin&initdb.exe -D ../data -E utf8 --locale C -U
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory ../data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
creating configuration files ... ok
creating template1 database in ../data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... not supported on this platform
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
"postgres" -D "../data"
"pg_ctl" -D "../data" -l logfile start
C:\Program Files\PostgreSQL\9.3\bin&
7、启动数据库,进入客户端:
C:\Program Files\PostgreSQL\9.3\bin&"pg_ctl" -D "../data" start
server starting
C:\Program Files\PostgreSQL\9.3\bin&LOG: database system was shut down at 2014-
09-18 10:19:54 HKT
LOG: autovacuum launcher started
C:\Program Files\PostgreSQL\9.3\bin&LOG: database system is ready to accept con
C:\Program Files\PostgreSQL\9.3\bin&psql.exe
psql (9.3.5)
Type "help" for help.
postgres=#
如果您喜欢本文请分享给您的好友,谢谢!
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)postgresql&win7&安装配置
本来打算用mysql的, 不过在网上搜了一下postgresql口碑也不错, 并且和django配合很好.所以试着用用吧!
地址:http://www.postgresql.org/download/或/products-services-training/pgbindownload
2.解压到目录,(不用安装,不过后面得自己配) E:\pgsql
打开cmd切换到该目录下,配置环境变量等信息
E:\pgsql&set PGHOME=e:\pgsql
E:\pgsql&set PATH=%PGHOME%\%path%
E:\pgsql&set PGHOST=localhost
E:\pgsql&set PGLIB=%PGHOME%\lib
E:\pgsql&set PGDATA=%PGHOME%\data
3.初始化数据库
如果环境变量什么的都配好后 现在到pgsql目录下输入initdb就可以了, 这个命令有可选参数,
不过第一次使用默认就可以. 可能以上配置的环境变量也生效了.
关于命令参数介绍&/manual/PostgreSQL8/app-initdb.html
==================以下是来自cmd的信息=======================
E:\pgsql&initdb
属于此数据库系统的文件宿主为用户 "yang".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "Chinese (Simplified)_People's Republic of
China.936"进
本地化隐含的编码 "GBK" 不允许作为服务器端的编码.
默认的数据库编码将采用 "UTF8" 作为代替.
initdb: 无法为本地化语言环境"Chinese (Simplified)_People's Republic of
"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"
创建目录 e:/pgsql/data ... 成功
正在创建子目录 ... 成功
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 32MB
创建配置文件 ... 成功
在 e:/pgsql/data/base/1 中创建 template1 数据库 ... 成功
初始化 pg_authid ... &成功
初始化dependencies ... 成功
创建系统视图 ... 成功
正在加载系统对象描述 ...成功
创建(字符集)校对规则 ... 在此平台上不支持
创建字符集转换 ... 成功
正在创建字典 ... 成功
对内建对象设置权限 ... 成功
创建信息模式 ... 成功
正在装载PL/pgSQL服务器端编程语言...成功
清理数据库 template1 ... 成功
拷贝 template1 到 template0 ... 成功
拷贝 template1 到 template0 ... 成功
警告:为本地连接启动了 "trust" 认证.
你可以通过编辑 pg_hba.conf 更改或你下次
行 initdb 时使用 -A或者--auth-local和--auth-host选项.
成功. 您现在可以用下面的命令运行数据库服务器:
& & ""postmaster -D
"e:/pgsql/data"
& & ""pg_ctl -D
"e:/pgsql/data" -l logfile start
==================以上是来自cmd的信息=======================
4.启动/关闭数据库
E:\pgsql&pg_ctl start/stop
现在已经启动了,此时要操作数据库 比如创建库等操作, 需要再开启一个cmd. 毕竟没有linux shell那么方便...
接下来关闭. 不关闭再次开启会有警告信息.
贴几个常用命令
initdb=初始化 数据库。
pg_ctl start=启动数据库
pg_ctl stop=停止数据库
createdb db_name=新建数据库
createuser us_name=创建数据库帐号
/manual/PostgreSQL8/app-initdb.html
这里好像是官方中文手册...?&
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Windows下Postgresql的下载与配置_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Windows下Postgresql的下载与配置
上传于||文档简介
&&Windows下Postgresql的下载与配置
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 postgresql join 优化 的文章

 

随机推荐