【发布时间】:2015-02-18 09:41:03
【问题描述】:
我在 PostgreSQL 数据库中有一个表:temp 有 4 列
(
id int,
campaign character varying,
sender character varying,
date_s date
)
已经有大约 900 万条记录。暂时没有索引。
问题是当我试图做一个:
SELECT COUNT(*)
FROM temp
WHERE
id = $idmail and
campaign = '$variable_campaign' AND
date > '$date_c' "
在 100K 循环中。
查询没有响应。 (我在 PHP 中设置了无限的 set_time_limit 否则我会在 5 分钟内得到 500 错误)
实际上,所有这些查询的目的是获取相关活动在本周未发送到的邮件列表。
你有什么想法吗,因为我真的不知道该怎么做!
如果无法执行查询,我可以做一种临时文件,但我更喜欢处理数据库,它更干净!
【问题讨论】:
-
“暂时没有索引”和“在 100K 循环中”,听起来像是解释性能问题的 2 个主要问题。但是,您为什么不创建一个查询来一次性选择您需要的所有记录呢?使用EXPLAIN ANALYZE获取查询计划和执行时间,可以发到explain.depesz.com
-
为什么不创建索引来提高性能?在 TEMP(ID、CAMPAIGN、DATE)上创建索引 TEMP_IDX_1;
-
@Christian:索引可能会大大改善此查询,但如果执行 100000 次,它仍然很慢。索引只是性能优化的一小部分。
标签: php database postgresql