长mysql插入查询

时间:2016-01-29 04:36:43

标签: php mysql

这些应该/可以存在多长时间?

我目前有一个插入查询

$insert_sql = "INSERT INTO cards (user_id, deck_id,card_one,card_two,card_three,card_order,temp_id) VALUES";

$insert_sql .= "(?,?,?,?,?,?,?)";//int,int,text,text,text,int,int

文本的最大值为5,000个字符。

上述插入值中可以有1到1,000个

将其分解为单独的查询会更好吗?

示例:

$insert_sql = "INSERT INTO cards (user_id, 
deck_id,card_one,card_two,card_three,card_order,temp_id) VALUES   
(?,?,?,?,?,?,?), (?,?,?,?,?,?,?), (?,?,?,?,?,?,?), (?,?,?,?,?,?,?)"
This last part here ^ can have between 1-1000 sets of question marks

1 个答案:

答案 0 :(得分:4)

来自MySQL documentation

  

虽然InnoDB在内部支持大于65,535字节的行大小,但MySQL本身对所有列的总大小强加行大小限制为65,535

假设你有8列,每列包含5000个字符,那么这需要的最小内存量为40KB,假设每个字符只有1个字节(根据你使用的编码,它可能超过这个数量)。但是,您也可能超过MySQL规定的限制。

我将您的问题视为更多的设计问题,特别是您试图将过多的数据塞入单个记录中。您可以考虑通过将单个列或列的子集作为其自己的单独表来更改您的设计。

关于您的INSERT语句,批量INSERT进行操作没有任何问题。一次执行1000次插入的唯一风险是,每条记录包含大量数据,您可以锁定MySQL数据库引擎,防止其他任何内容使用它。在这种情况下,您可以考虑将INSERT语句分成小批量,并在插入每个批次时间隔开。