我知道两种插入方式,没有重复。首先是使用WHERE NOT EXISTS
条款:为避免插入重复行,哪种SQL模式更快?
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 *吗?选择所有列?一般来说,一个wouuldn't做到这一点,但我不是Postgres的专家。 – DOK 2010-06-25 18:05:36
你能用EXPLAIN运行这两个查询并发布吗?分析工具可帮助您根据具体情况回答这些问题。 – Freiheit 2010-06-25 18:05:38