我以为没什么好办法解决,其实当时 @大尨 已经给出解决办法,只是我才疏学浅,没有理解,平时也不怎么写代码就搁置了
前几天在处理一些数据的时候,发现单字段索引和组合索引对于查询速度的影响,正好现在gpt盛行,于是一通问答
然后就想起了去年这个问题
以下来自chatgpt的解答:
在thinkphp5中,可以使用Db类的`insertAll()`方法一次性插入多条数据到数据库。同时,可以使用数据库的"唯一索引"机制来判断是否存在重复数据,如果存在则忽略。
以下是一个示例代码,假设要向`user`表中插入1000条数据,其中`name`和`age`字段组成唯一索引(即两个字段的组合值必须唯一),如果已经存在相同的记录,则忽略:
php
// 假设已经有一个$users数组,其中包含1000条要插入的数据
$users = [
['name' => 'Alice', 'age' => 20],
['name' => 'Bob', 'age' => 25],
// ...
];
// 获取数据库连接对象
$db = db('user');
// 开始事务
$db->startTrans();
try {
// 使用insertAll()方法插入数据,并设置ignore选项为true
// ignore选项表示如果出现重复数据(即唯一索引冲突),则忽略该条数据
$result = $db->insertAll($users, true);
// 提交事务
$db->commit();
if ($result) {
// 插入成功
echo '插入成功';
} else {
// 插入失败
echo '插入失败';
}
} catch (\Exception $e) {
// 回滚事务
$db->rollback();
// 输出错误信息
echo '插入失败:' . $e->getMessage();
}
在上述代码中,`insertAll()`方法的第二个参数设置为`true`,表示使用"忽略"选项(即如果出现重复数据,则忽略该条数据)。如果该参数设置为`false`(默认值),则会抛出异常,表示唯一索引冲突。
随即就做了索引尝试
虽然现在用不到了,但是不妨碍我学到了