mysql - 删除查询需要很长时间才能在 Google Cloud MySQL 中运行
问题描述
我在 Google Cloud 的 MySql 数据库中有一个包含 433,332 条记录的表。表看起来像这样
Album_ID | Track_Len | Track_Name | Ft_LName1 | Ft_FName1 | Ft_LName2 | Ft_FName2 | Ft_LName3 | Ft_FName3 | Row_Num |
+---------+-----------+---------------------------------------+-----------+-----------+-----------+-----------+-----------+-----------+---------+
| N40781 | 5.19 | Tumbala (Da Lata Remix) | NULL | Novalima | NULL | NULL | NULL | NULL | 1 |
| N40781 | 5.01 | Ruperta (Zeb Remix) | NULL | Novalima | NULL | NULL | NULL | NULL | 2 |
| N40781 | 6.35 | Coba Guarango (Toni Economides Remix) | NULL | Novalima | NULL | NULL | NULL | NULL | 3 |
| B15033 | 6.02 | II-V-P | Quartet | ARC | NULL | NULL | NULL | NULL | 4 |
| N32395 | 4.47 | My Babe | Stigers | Curtis | NULL | NULL | NULL | NULL | 5 |
| N32395 | 5.13 | Thats All Right | Stigers | Curtis | NULL | NULL | NULL | NULL | 6 |
请注意,该表的主键应该是 (Album_ID, Track_Name) 我知道表中有重复的数据条目。我正在尝试运行以下查询来查找和删除这些条目:
select count(*)
from Track t1, Track t2
where t1.Album_ID = t2.Album_ID
AND t1.Track_Name = t2.Track_Name
AND t1.Row_Num > t2.Row_Num;
但是,这需要很长时间才能运行。谁能建议一种更有效的方法来做到这一点?
解决方案
要获取重复列表,我建议:
select Album_ID, Track_Name, count(*)
from Track t
group by Album_ID, Track_Name,
having count(*) > 1
如果你想要计数,那么:
select count(*) as num_keys_with_duplicates,
sum(cnt - 1) as num_duplicates
from (select Album_ID, Track_Name, count(*) as cnt
from Track t
group by Album_ID, Track_Name,
having count(*) > 1
) x;
推荐阅读
- arrays - 刷新页面时,数组数据被覆盖 Firebase React js
- nearprotocol - 所有 NEAR 区块链交易都需要接收方帐户吗?
- php - Blade/Laravel - 防止标记模板中的自闭标签
- symfony4 - 为自定义路由使用自定义方法控制器
- python - 我想用python制作gui以在RDS MySQL DB中显示表
- javascript - 未捕获的 SyntaxError:角度 8 中的意外标记“<”
- python-3.x - 如何使这个 tkinter 输出看起来更整洁?
- excel - VBA 代码适用于新工作簿,但不是我希望它工作的那个
- if-statement - 如何使用增长和过滤功能根据 ID 和缺失值在 Google 表格中创建动态范围?
- python - 如何将大小为 N 的列表尽可能均匀地分成 K 组