对于大型数据库,可以使用这样的选择来避免重复插入吗? mysql是否优化了WHERE NOT子句,以及如何或不好的做法。可以说tableA有500万条记录。
INSERT INTO tableA (colA, colB, colC)
(SELECT DISTINCT tableB.a as colA, tableB.b as colB, tableB.c as colC
FROM tableB
WHERE NOT tableB.colA IN
(SELECT colA FROM tableA)
)
答案 0 :(得分:3)
如果您不想在create unique index unq_tableA_colA on tableA(colA);
中重复,那么“正确”的方式是让数据库完成工作。所以:
INSERT INTO tableA (colA, colB, colC)
SELECT DISTINCT tableB.a as colA, tableB.b as colB, tableB.c as colC
FROM tableB
ON DUPLICATE KEY UPDATE colA = VALUES(colA);
然后,您可以运行查询,安排忽略任何重复错误:
mongocxx::cursor cursor = collection.find(
document{} << "Builds.level" << open_document <<
"$gte" << 1 <<
"$lte" << 2
<< close_document << finalize);
for(auto doc : cursor) {
std::cout << bsoncxx::to_json(doc) << "\n";
}
这种方法的优点在于它消除了对竞争条件的担忧。 “同时”发生的两个插入可以在表中插入相同的值“A”。但是,当数据库保证数据的完整性时,就不会发生这种情况。
并且,因为唯一性保证使用索引,所以它不会产生那么多额外开销(如果它没有列上的索引,则会比你的版本少得多)。
答案 1 :(得分:0)
我会将最后一个子查询部分更改为<!DOCTYPE html>
<html>
<head>
File upload system
</head>
<body>
<form action="{% url "upload" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name=myfile" />
<p><input type="submit" value="upload"/></p>
</form>
</body>
</html>
查询,如
>>> from lstm_predictor import lstm_model