相关疑难解决方法(0)

PostgreSQL查询耗时太长

我有几亿行的数据库.我正在运行以下查询:

select * from "Payments" as p
inner join "PaymentOrders" as po
on po."Id" = p."PaymentOrderId"
inner join "Users" as u
On u."Id" = po."UserId"
INNER JOIN "Roles" as r
on u."RoleId" = r."Id"
Where r."Name" = 'Moses'
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

当where子句在数据库中找到匹配项时,我会在几毫秒内得到结果,但如果我修改查询并r."Name"在where子句中指定不存在,则需要花费太多时间才能完成.我猜PostgreSQL正在对Payments表(包含最多行)进行顺序扫描,逐行比较每一行.

是不是postgresql足够聪明,如果Roles表包含任何行,首先检查Name 'Moses'

角色表仅包含15行,而付款包含约3.5亿行.

我正在运行PostgreSQL 9.2.1.

顺便说一下,对同一模式/数据的相同查询在MS SQL Server上需要0.024ms才能完成.

我将在几个小时内更新问题并发布EXPLAIN ANALYZE数据.


这里解释分析结果:http://explain.depesz.com/s/7e7


这是服务器配置:

version PostgreSQL 9.2.1, compiled by Visual C++ build 1600, 64-bit
client_encoding UNICODE
effective_cache_size    4500MB
fsync   on
lc_collate …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-performance

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