Php 在数据库中添加条目的最快方法(如果不存在)
我想向MySQL DB表添加一组条目。如果条目不存在,我需要添加它,否则会向外部发送一些信号,表明它没有被添加(f.e.return false) 我可以检查条目是否存在(使用一个查询),如果不存在,则添加另一个条目。然而,由于可能需要添加数千个条目,我认为额外的查询是不好的Php 在数据库中添加条目的最快方法(如果不存在),php,mysql,sql,Php,Mysql,Sql,我想向MySQL DB表添加一组条目。如果条目不存在,我需要添加它,否则会向外部发送一些信号,表明它没有被添加(f.e.return false) 我可以检查条目是否存在(使用一个查询),如果不存在,则添加另一个条目。然而,由于可能需要添加数千个条目,我认为额外的查询是不好的 我是否可以只使用一个MySQL查询,如果它不存在,则添加条目;如果它存在,则返回false?您可以使用WHERE NOT exist语法: INSERT INTO table (name, address, tele) V
我是否可以只使用一个MySQL查询,如果它不存在,则添加条目;如果它存在,则返回false?您可以使用WHERE NOT exist语法:
INSERT INTO table (name, address, tele)
VALUES ('John', 'Somewhere', '001')
WHERE NOT EXISTS (
SELECT name FROM table WHERE name='value'
);
要使用带insert的WHERE NOT/EXIST查询优化查询,可以按如下方式执行:
INSERT INTO table (name, address, tele)
VALUES ('John', 'Somewhere', '001')
WHERE NOT EXISTS (
SELECT 1 FROM table WHERE name='value'
);
可以使用LIMIT 1
进行进一步优化,如:
INSERT INTO table (name, address, tele)
VALUES ('John', 'Somewhere', '001')
WHERE NOT EXISTS (
SELECT 1 FROM table WHERE name='value' LIMIT 1
);
注意:
SELECT 1
比SELECT[column\u name]更快……
尝试插入重复语法,这对CSV有好处。您多长时间执行一次?在每次插入之前执行SELECT
不会太贵,因此,如果这是一次性或罕见的操作,我认为您不会节省太多时间。是的,我正在从CSV文件导入它们,其中可能有1000-10000个条目。真的很感谢你的回答,戴,我忘了我必须先跟踪时间,也许这个问题真的不需要这样的修复,我会尝试使用INSERT IGNORE(尽管它半抑制错误)并检查受影响的行数。如果您是从CSV导入,我也会尝试只加载数据,将文件填充到临时表中,然后从那里进行插入(或者甚至将临时表连接到现有的数据表中,直接获取副本)。