我正在尝试基于多列组合来唯一行,而不使用索引/键来插入更新重复行。我需要的是 INSERT ... ON DUPLICATE KEY ,但由于索引大小限制,我无法添加索引。
这是我的表格设计
表:关键字内容
+--------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| group_id | int(10) unsigned | NO | | NULL | |
| encoding | tinyint(3) unsigned | NO | | 0 | |
| content | text | NO | | NULL | |
| active_period | datetime | YES | | NULL | |
| status | tinyint(3) unsigned | NO | | 1 | |
| flag | tinyint(1) | YES | | 1 | |
| description | text | YES | | NULL | |
| updated_by | varchar(255) | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+--------------------+---------------------+------+-----+---------+----------------+
用于唯一行的列是:
- 组号
- 内容
- 状态
我还尝试通过分离出要插入/更新的内容来处理 PHP 中的流程,但由于从电子表格导入的数据量很大,这会导致性能问题。
最佳答案
据我了解,您不能在 3 列上添加组合索引,因为这会因为内容而变得太大。
由于您确实需要一个索引来实现高效查找和插入,我建议在表中添加一列,您可以在其中存储 3 列组合的哈希值,并在其上添加一个唯一索引。
显然,任何散列理论上都存在冲突风险,但使用不太可能成为问题的强散列。
关于php - 如何在不添加任何索引的情况下插入更新重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48578010/