Bra*_*rad 3 mysql indexing transactions
我有很多数据要将LOW_PRIORITY INSERT到表中.每次插入行时都会重建索引,这需要很长时间.我知道我可以使用事务,但是如果只有一行失败,我不希望整个集合失败.
有没有办法让MySQL停止重建特定表上的索引,直到我告诉它可以恢复?
理想情况下,我想插入1000行左右,设置索引做它的事情,然后插入接下来的1000行.
我不能使用INSERT DELAYED,因为我的表类型是InnoDB.否则,INSERT DELAYED对我来说是完美的.
并不重要,但我使用PHP/PDO来访问MySQL.您可以给予的任何建议将不胜感激.谢谢!
ALTER TABLE tableName DISABLE KEYS
// perform inserts
ALTER TABLE tableName ENABLE KEYS
Run Code Online (Sandbox Code Playgroud)
这会禁用所有非唯一索引的更新.缺点是这些索引也不会用于选择查询.
但是,您可以使用多插入(INSERT INTO表(...)VALUES(...),(...),(...),它们也将批量更新索引.