我有一个非常频繁的数据应用程序。数据是字符串[word]和int值,我将其插入数据库以供进一步处理。我正在使用mysql C ++连接。
我从c ++ envioronment访问mysql。最初我虽然为即将到来的数据中的每一个调用插入查询并插入到数据库中。然后得到的建议是,当数据插入频率很高时,对每个这样的插入进行查询将变得非常昂贵且不合适。
我建议使用dbms_pile
。我之前没有使用它,我阅读文档并获得了概念。
我认为这个功能:Triggers and stored procedures can send debugging information to a pipe. Another session can keep reading out of the pipe and display it on the screen or write it to a file
这个功能足以满足我的要求吧?而是将其写入文件我可以插入数据库而不显示。参考:Dbms_pipe
答案 0 :(得分:1)
可考虑的方法:
LOAD DATA LOCAL INFILE
将前一个文件加载到数据库中。它是在MySql中加载批量数据的最快方式。如果由于某种原因你不能使用文件进行缓冲,至少使用多插入语法
INSERT INTO table_name (col1, col2,...)
VALUES (value1, value2, ...),(value3, value4,...),...
为一批数据构建查询字符串,然后立即执行。
另请查看 Speed of INSERT Statements :
要优化插入速度,请将许多小型操作合并为一个 大手术。 理想情况下,您进行单一连接,发送数据 对于许多新行,同时延迟所有索引更新和一致性 检查直到最后。
插入行所需的时间由以下确定 因素,数字表示大致比例:
连接:(3)
向服务器发送查询:(2)
解析查询:(2)
插入行:(1×行的大小)
插入索引:(1×索引数)
结束:(1)