2016-05-13 77 views
-1

我試圖做兩個非常大的表之間的更新(數百萬條記錄)索引爲大於/小於查詢不到

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 

我有單獨在這兩個表中的所有字段的索引,包括值字段。他們都是普通/ BTree(默認)。

有沒有更好的方法來索引值字段以獲得更好的性能?它會增加一個很大的開銷(否則就是使用=)一個非常快的更新。我的第一次測試也是3分鐘更新25條記錄,我有500萬條更新。

回答

1

通常,每個表只能有一個索引用於特定的WHERE子句。因此,如果它使用Field1上的索引,它將無法使用Value上的索引,反之亦然。該解決方案是使用複合指數:

ALTER TABLE TableA ADD INDEX (Field1, Value); 

由於上多列索引實際上是對任何前綴集中的列的索引,您可以在添加此索引中刪除上Field1個別指數。但是如果其他查詢需要的話,您仍然應該保留個人索引Value

相關問題