sql - 将列从一个表复制到另一个表,但它会挂起 DB Browser for SQLite
问题描述
我想将一个表的列复制到另一个表的列,条件是两个员工 id 应该相等,超过 30 万条记录。
以下是我的查询
UPDATE emp SET emp.address = (
SELECT emp_address
FROM address
WHERE emp.emp_id=address.emp_id LIMIT 1
);
我从过去 1 小时开始执行此查询,但仍在进行中,我已在“DB Browser for SQLite”上执行此查询。
我有什么错误吗?还是sqlite浏览器有问题?
解决方案
对于此查询:
UPDATE emp
SET emp.address = (SELECT a.emp_address
FROM address a
WHERE e.emp_id = a.emp_id
LIMIT 1
);
你想要一个关于address(emp_id, emp_address)
.
emp(emp_id)
此查询不应使用索引,并且没有用处。如果您在 上有一个索引emp(address)
,您可能希望删除它并在更新后重新创建它。
话虽如此,您正在更新表中的所有记录。这是昂贵的。
重新创建表通常更快。像这样的东西:
create table temp_emp as
select . . . , -- all columns except address
(select a.emp_address
from address a
where e.emp_id = a.emp_id
limit 1
) as address
from emp;
truncate table emp; -- backup the data first!
insert into emp ( . . . ) -- list the columns here
select . . .
from temp_temp;
您可以创建临时表并查看需要多长时间(使用上述索引)。截断并且insert
不应该花费很长时间。但请先备份数据!
推荐阅读
- variables - Ansible:在另一个变量声明中使用一个变量
- html - Css 首字母解决方法
- javascript - 扩展反应组件和附加类
- php - Goole App Engine - 部署的 PHP 应用程序无法识别 php 文件
- python - Python 导入和包:__init__.py 文件未修复 ModuleNotFoundError?
- javascript - 为什么 angular cli --outputHashing=all 不处理 svg 图像?
- java - 如何在 org.slf4j 中为版本启用日志记录:Spring boot 中的“2.0.0-alpha1”
- python - 从 JSON 输出中选择数据以在 Python 中插入语句
- android - base.apk 中的奇怪崩溃(偏移量 0xc07000)Android
- .net - 在 MESSAGEBOX 中的 HELP 上调用浏览器页面