索引大于/小于查询

时间:2016-05-13 19:18:16

标签: mysql indexing

我正在尝试在两个非常大的表(数百万条记录)之间进行更新

Update TableA as T1
Inner Join TableB as T2
On T1.Field1=T2.Field1
And T1.Value >= T2.MinValue
And T1.Value <= T2.MaxValue
Set T1.Field2=T2.Field2

我在两个表中分别对所有字段都有索引,包括值字段。它们都是Normal / BTree(默认)。

有没有更好的方法来索引值字段以获得更好的性能?它增加了一个巨大的开销,否则(使用只是=)一个非常快速的更新。我的第一次测试也是3分钟更新25条记录,我有500万条更新。

1 个答案:

答案 0 :(得分:1)

通常,每个表只能有一个索引用于特定的WHERE子句。因此,如果它使用Field1上的索引,它将无法使用Value上的索引,反之亦然。解决方案是使用复合索引:

ALTER TABLE TableA ADD INDEX (Field1, Value);

由于多列上的索引实际上是列的任何前缀集的索引,因此您可以在添加此索引时删除Field1上的单个索引。但是,如果其他查询需要,您仍应将个人索引保留在Value