mysql数据库大量查询次数如何优化

有一个excel表格里面有十万条数据.有一个mysql数据库表,里面有几万条数据.现在需要以excel表格中的数据为主,去和数据库中的数据对比,如果excel中有的数据而数据库表中没有,就要将这个数据添加到数据库中.
我现在用的是普通的获取一条excel数据去查数据库,如果不存在就插入进去.但是这样效率好慢,有多少数据就要查询多少次.6万条数据就要三十多分钟.有没有大神给个优化思路呀.
万分感激

MySQL 8.0.16 已经发布,它像往常一样增强了组复制 Group Replication 功能。

这篇文章介绍了 MySQL 8.0.16 为 Group Replication 带来的新功能:

Message fragmentation(信息碎片化)。


背景

Group Replication 目前使用 XCom(一种组通信引擎),特点:原子性,组员状态检测等。每个成员的组复制插件先将信息转发到本地 XCom,再由 XCom 最终以相同的顺序将信息传递给每个组成员的 Group Replication 插件。

XCom 由单线程实现。当一些成员广播信息过大时,XCom 线程必须花费更多的时间来处理那个大信息。如果成员的 XCom 线程忙于处理大信息的时间过长,它可能会去查看其他成员的 XCom 实例。例如,忙碌的成员失效。如果是这样,该组可以从该组中驱逐忙碌的成员。

MySQL 8.0.13 新增  group_replication_member_expel_timeout  系统变量,您可以通过它来调整将成员从组中驱逐的时间。例如,怀疑成员失败,但成员实际上忙于处理大信息,给成员足够的时间来完成处理。在这种情况下,是否为成员增加驱逐超时的设置是一种权衡。有可能等了很久,该成员实际真的失效了。


Message fragmentation(信息碎片化)

MySQL 8.0.16 的 Group Replication 插件新增用来处理大信息的功能:信息碎片化。

简而言之,您可以为成员的广播信息指定最大值。超过最大值的信息将分段为较小的块传播。

您可以使用  group_replication_communication_max_message_size  系统变量指定允许的信息最大值(默认值为10 MiB)。


示例

让我们用一个例子来解释新功能。图1显示了当绿色成员向组广播信息时,新功能是如何处理的。

图1 对传出信息进行分段

1. 如果信息大小超过用户允许的最大值(group_replication_communication_max_message_size),则该成员会将信息分段为不超过最大值的块。

2. 该成员将每个块广播到该组,即将每个块单独转发到XCom。

XCom 最终将这些块提供给组成员。下面三张图展示出了中间绿色成员发送大信息时工作的新特征。

图2a 重新组合传入的信息:第一个片段

3. 成员得出结论,传入的信息实际上是一个更大信息的片段。

4. 成员缓冲传入的片段,因为他们认为片段是仍然不完整的信息的一部分。(片段包含必要的元数据以达到这个结论。)

图2b 重新组合传入的信息:第二个片段

5. 见上面的第3步。

6. 见上面的第4步。

图2c 重新组合传入的信息:最后一个片段

7. 成员得出结论,传入的信息实际上是一个更大信息的片段。

8. 成员得出结论,传入的片段是最后一个缺失的块,重新组合原始信息,然后对其进行处理,传输完毕。


结论

MySQL 8.0.16 已经发布后,组复制现在可以确保组内交换的信息大小不超过用户定义的阈值。这可以防止组内误判而驱逐成员。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-08
先把excel的数据导入到一个临时新建的表,然后从这个新表插入到原表。
insert into orig_table select * from new_table where not exists ( select 1 from
orig_table where column=new_table.column ... )
第2个回答  2018-08-27
你是如何用excel的数据去对比mysql中表的数据的?是将excel导入到mysql中吗?追问

不是 是使用poi去读取的excel文件

追答

其实你10几万条数据不算大的,是不是你的表中没有索引?

我觉得可以将excel中的数据先导入到mysql中,然后用replace into插入就好了

本回答被提问者和网友采纳