我有一些需要针对非常庞大的表(约100 GB)运行的删除查询,并且我希望尽可能地优化它们:
delete from table1 where column1 < date_sub(now(), interval 100 hour);
column1 是一个 datetime
类型的列,我认为为此列创建索引将加快删除速度。除此之外,还有什么可以做的吗?使用 date_sub()
函数会减慢查询速度吗?在运行查询之前应该计算该值吗?
delete from table2 where column2 = x;
column2是table2的主键,因此根据MySQL文档,它已经是一个索引。我的问题是:索引类型是PRIMARY
,这与INDEX
相同吗?我是否需要创建另一种INDEX
来加速?
delete from table3 where column3 = y;
table3有一个复合主键,即column3和column4。所以我有一个主键索引,但由于删除查询不使用column4,我是否应该为column3单独创建一个索引?还是使用组合主键就可以了?
我想这些都是非常基本的问题,但我找不到特定于我的情况的明确答案,所以任何帮助都将不胜感激!
EXPLAIN
并找出它在做什么。如果必要,可以将其粘贴进来。 - SchwernEXPLAIN
仅适用于SELECT
语句(目前为止)。 - Bill KarwinDATETIME
而不是一个DATE
?否则在它上面使用小时间隔会很愚蠢。 - SchwernEXPLAIN
。EXPLAIN SELECT * FROM table1 where column1 < date_sub(now(), interval 100 hour);
- Schwern