Postgresql'deki hemen hemen aynı tabloların arasındaki farkı almaya çalışıyorum. Ben koşuyorum geçerli sorgu geçerli:Postgresql UNION, tek tek sorguları çalıştırdığı sürece 10 kez uzun sürüyor
SELECT * FROM tableA EXCEPT SELECT * FROM tableB;
ve
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
yukarıdaki sorguları Her çalıştırmak için yaklaşık 2 dakika sürer (Onun büyük tablo)
Ben iki birleştirmek istedim zaman kazanmak için umuyor, bu yüzden denedim:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB
UNION
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
Ve çalışırken, 20 dakika sürer! Her sorguyu tek tek çalıştırmak için en fazla 4 dakika süreceğini tahmin ediyorum.
UNION bunu yapmak için çok uzun süren bir iş var mı? Ya da bunu hızlandırabileceğim herhangi bir yol var mı (UNION ile olsun ya da olmasın)?
GÜNCELLEŞTIRME: Sorguyu UNION ALL ile birlikte yürütmek, her birinin kendi başına çalıştığı sürenin neredeyse 4 katı olmak üzere 15 dakika sürer. UNION (tümü) nin bunu hızlandırmayacağını söyleyerek düzeliyorum mu?
Sadece tabloA' veya 'tableB' içinde yinelenmeleri gerekecek olan çiftler var mı? Aksi takdirde 'UNION ALL' ı deneyin. –
@ScrumMeister: Bunu daha önce hiç düşünmemiştim. Birleşim, tek bir tablodaki yinelemeleri kaldırır. Sadece iki sendikalı tablo arasında kopyalar çıkardığını düşündüm. Bunu araştırmam gerekebilir. – RThomas
"EXPLAIN ANALYZE" çıktısını yayınlayabilir misiniz? –