delete from + delTab + where +timeKey+ < startDay limit 100000,
删除数据很慢10多秒删除一次,表有10亿条数据并按timeKey建了索引,删除的很慢,各位大神有快方案?
SELECT
floor((t.row_num - 1) / 1000) + 1 AS page_num,
min(t.id) AS start_key,
max(t.id) AS end_key,
count(*) AS page_size
FROM (
SELECT id, row_number() OVER (ORDER BY id) AS row_num
FROM books
) t
GROUP BY page_num
ORDER BY page_num;
先找id 找到后
delete talbe where id>999 and I’d<99999
这段SQL执行时间慢不慢呢 ??消耗多久
delete table where id =1;
delete table where id =2
写个python脚本 ,开启10个线程。 速度飞起! 我经常这么干!
注意:监控CPU
limit 100000这种删除会越删越慢,不要加里面的,要用where 条件
- 这个表有主键没 ?
- select 主键id from deltable where timekey < ‘2023-0101’; 看看需要多久??
- python脚本从 上面 获取的 主键id 并行删除 delete from deltable where id = 111 。 python的会??
获取最大最小ID的SQL 语句执行起来都很慢,也是瓶颈
一百万条花了191秒
分页删除,楼上给了方案。还可以避免热点问题
到底是 秒 还是 毫秒???
先把你 tidb 集群的配置先贴出来,部署架构、对应机器的配置;
而且,你别用 navicat测了,我看你时间显示都有问题,你就用mysql 客户端,直连测吧
有, 留下的数据插到别的表里, 然后drop表, 之后rename不就行了。
社区大佬写的一个脚本,你看看有没有用
#可以实现删除百万级别以上的数据,而且不影响tidb正常使用
date1=date -d “1 day ago” +“%Y-%m-%d”
echo $date1
delete_db_sql=" delete from xxa where a.create_time < ‘2023-01-01 00:00:00’ and a.intelligent_type = ‘2’ limit 50000;"
echo $delete_db_sql
i=0
while ((++i)); do
a=$(/bin/mysql -uroot -pxxx -A xxx -h10.20.10.xx -P 4000 --comments -e “${delete_db_sql}” -vvv|grep “Query OK” |awk ‘{print $3}’)
echo $a
if (($a<1)); then
break 1
fi
sleep 1
printf “%-4d” $((i))
done
realcp1018/tidb-toolkit 试试这个
10亿数据,删完还剩多少啊
慢慢的批量删除了,这个计划任务
哪个库都不快
怎么看着是ms 是毫秒啊