小编rud*_*ore的帖子

在WHERE语句中使用OR缓慢JOIN查询

这是我的问题的一个简单示例:

CREATE TABLE test1 (id SERIAL, key TEXT UNIQUE, value TEXT);
CREATE TABLE test2 (id SERIAL, key TEXT UNIQUE, value TEXT);

INSERT INTO test1 (key, value) 
SELECT i::TEXT, 'ABC' || i::TEXT 
FROM generate_series(0, 1000000) AS i;

INSERT INTO test2 (key, value) 
SELECT i::TEXT, 'ABC' || (i+1000)::TEXT 
FROM generate_series(0,  600000) AS i;

INSERT INTO test2 (key, value) 
SELECT i::TEXT, 'ABC' || (i+1000)::TEXT 
FROM generate_series(1000000, 1200000) AS i;

CREATE INDEX test1_key ON test1 (key);
CREATE INDEX test1_value ON test1 (value);
CREATE INDEX …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql performance join

7
推荐指数
1
解决办法
2327
查看次数

Postgres查询ODBC的速度慢了几个数量级?

我们有一个应用程序通过psqlodbc 09.00.0200驱动程序从PostgreSQL 9.0.3数据库获取一些数据,方法如下:

1)SQLExecDirect,带有START TRANSACTION
2)SQLExecDirect

DECLARE foo SCROLL CURSOR FOR  
SELECT table.alotofcolumns  
FROM table  
ORDER BY name2, id LIMIT 10000
Run Code Online (Sandbox Code Playgroud)

3)SQLPrepare用

SELECT table.alotofcolumns, l01.languagedescription
FROM fetchcur('foo', ?, ?) table (column definitions) 
LEFT OUTER JOIN languagetable l01 ON (l01.lang = 'EN'
                                  AND l01.type = 'some type'
                                  AND l01.grp  = 'some group'
                                  AND l01.key  = table.somecolumn)
[~20 more LEFT OUTER JOINS in the same style, but for an other column]
Run Code Online (Sandbox Code Playgroud)

4)SQLExecute,其中param1设置为SQL_FETCH_RELATIVE,param2设置为1
)SQLExecute,param1设置为SQL_FETCH_RELATIVE,param2设置为-1
6)SQLExecute,param1设置为SQL_FETCH_RELATIVE,param2设置为0
7)取消分配全部,关闭游标,结束事务

函数fetchcur执行FETCH RELATIVE $3 IN $1 …

sql database postgresql performance odbc

6
推荐指数
1
解决办法
3207
查看次数

标签 统计

database ×2

performance ×2

postgresql ×2

sql ×2

join ×1

odbc ×1