它取决于值集的数量吗?它是否依赖于INSERT语句中的字节数?
我正在设计一个MySQL数据库,它需要在各种InnoDB表中每秒处理大约600行插入.我当前的实现使用非批处理的预准备语句.但是,写入MySQL数据库瓶颈和队列大小会随着时间的推移而增加.
实现是用Java编写的,我不知道该版本是否有用.它使用MySQL的是Java连接器.我需要考虑转向JDBC明天.我假设这是两个不同的连接器包.
我已经在这个问题上阅读了以下主题:
并从mysql网站:
我的问题是:
是否有人在批处理模式下使用INSERT与预处理语句相比,对使用INSERT具有多个VALUE 的单个语句有关于性能差异的建议或经验.
什么是之间的性能差异MySQL的Java连接器对JDBC.我应该使用其中一个吗?
这些表用于存档目的,并且将看到约90%写入〜10%读取(甚至可能更少).我正在使用InnoDB.这是MyISAM的正确选择吗?
预先感谢您的帮助.
我想做一个批量插入,类似于这个问题
SQL Server是否可以在单个insert语句中插入多少行?
例如,插入第一个值但第二个值导致主键违规时会发生什么.这些INSERT陈述是否已回滚?
INSERT INTO tbl_name (a,b)
VALUES (1, 2), (1, 3));
Run Code Online (Sandbox Code Playgroud) 我正在部署一个应用程序来使用一些 .csv 数据。我想将它们复制到 MySQL 表中。在 stackoverflow 用户的帮助下,我编写了以下代码:
import csv
import MySQLdb
db = MySQLdb.connect( host = "dbname.description.host.com",
user = "user",
passwd = "key",
db = "dbname")
cursor = db.cursor()
query = 'INSERT INTO table_name(column,column_1,column_2,column_3)
VALUES(%s, %s, %s, %s)'
csv_data = csv.reader(file('file_name'))
for row in csv_data:
cursor.execute(query,row)
db.commit()
cursor.close()
Run Code Online (Sandbox Code Playgroud)
问题是,目前这个过程太慢了,我需要加快速度。
谢谢
我刚开始发现serviceStack ORMlite,我正在试图弄清楚如何进行批量插入.在任何地方都有这样的例子吗?
提前致谢
我将文本文件中的数据插入到 mySQL 数据库中,一次将插入大约 6000 个或更多条目。
try {
$sql = "INSERT INTO data (id,name,date,place) values(?,?,?,?) ";
$q = $pdo->prepare($sql);
foreach($data as $row) {
$q->execute(array($row['id'], $row['name'], $row['date'], $row['place']));
}
}
catch (PDOException $pe) {
echo $pe->getMessage();
}
catch (Exception $e ) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
我尝试了 3000 个条目,一切正常。但是,如果我要插入更多数据,则发生我的页面是空白的,并且没有将任何内容插入到我的数据库中。
什么可能导致这个问题,我该如何解决?
我使用 Laravel 5.3
我有 3 个表:表产品、表类别和表 products_categories
表产品:id、名称等
表类别:id、名称等
表 products_categories : id, product_id, category_id
在模型产品中,我有这样的方法:
public function categories()
{
return $this->belongsToMany(Category::class, 'products_categories', 'product_id', 'category_id')
->withPivot('id')
->withTimestamps();
}
Run Code Online (Sandbox Code Playgroud)
所以1个产品有很多类别
我的代码是这样的
例如 $param['category'] 像这样:
数组 ( ['category1'] => 4 ['category2'] => 11 ['category3'] => 18)
$product_id = 1
foreach ($param['category'] as $category) {
Product::find($product_id)
->categories()
->attach(
$category,
[]
);
}
Run Code Online (Sandbox Code Playgroud)
它用于在数据透视表上添加类别并且它有效
但是如果我更新数据透视表上的类别,它就不起作用
我尝试这样:
例如之前这样编辑过的分类
$param['类别'] =
数组 ( ['category1'] => 5 ['category2'] => 12 ['category3'] => 19)
$product_id = 1
以及更新数据透视表上数据的代码,如下所示: …
mysql ×4
php ×2
csv ×1
java ×1
jdbc ×1
laravel ×1
laravel-5.3 ×1
pivot-table ×1
python ×1
servicestack ×1
sql ×1
sql-server ×1