【发布时间】:2010-06-25 18:00:30
【问题描述】:
我知道两种不重复插入的方法。第一个是使用WHERE NOT EXISTS 子句:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
WHERE NOT EXISTS (
SELECT * FROM table_name AS T
WHERE T.col1 = %s
AND T.col2 = %s)
另一个在做LEFT JOIN:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
FROM ( SELECT %s, %s, %s ) A
LEFT JOIN table_name B
ON B.COL1 = %s
AND B.COL2 = %s
WHERE B.id IS NULL
LIMIT 1
对于一个比另一个快,是否有一个一般规则,或者它取决于表?有没有比两者都更好的不同方法?
【问题讨论】:
-
您确定要在第一个示例中使用 SELECT * 吗?选择所有列?一般来说,不会这样做,但我不是 Postgres 专家。
-
你能用 EXPLAIN 运行这两个查询并发布吗?分析工具可帮助您逐案回答这些问题。
标签: sql database postgresql query-optimization