首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Connector/没有优化插入?

问为什么Connector/没有优化插入?
EN

Stack Overflow用户
提问于 2016-12-16 01:14:13
回答 3查看 4.7K关注 0票数 3

我使用Connector/Python将许多行插入mysql中的临时表中。这些行都在一个列表中.我执行这样的插入:

代码语言:javascript
复制
cursor = connection.cursor();
batch = [[1, 'foo', 'bar'],[2, 'xyz', 'baz']]
cursor.executemany('INSERT INTO temp VALUES(?, ?, ?)', batch)
connection.commit()

我注意到(当然还有更多行)性能非常差。使用SHOW PROCESSLIST,我注意到每个insert分别执行。但文档https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html说,这应该优化为1插入。到底怎么回事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-16 01:15:47

回答,这样其他人就不会经历调试我不得不!

我在代码中使用准备好的语句并使用'?‘对其他查询进行了建模。指示参数。但是对于executemany(),您不能这样做!它必须使用'%s‘。改为:

代码语言:javascript
复制
cursor.executemany('INSERT INTO temp VALUES(%s,%s,%s)', batch)

...led以100倍的速度提高和优化的单一查询可以看到使用显示PROCESSLIST。小心标准“?”语法!

票数 7
EN

Stack Overflow用户

发布于 2020-11-11 03:59:26

如果您像使用IGNORE一样使用cursor.executemany('INSERT IGNORE INTO temp VALUES(%s,%s,%s)', batch),那么executemany()的作用就像多个执行!

票数 1
EN

Stack Overflow用户

发布于 2020-06-13 01:37:22

尝试打开以下命令: cursor.fast_executemany = True

否则,executemany的行为就像多次执行一样。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41175862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档