2016-04-09 18 views
-4

Bir MySQL veritabanında 40M kayıtları üzerinde çalışıyorum. şöyle senaryodur:Çok yavaş performans işleme 40M + kayıtları MySQL tabloları

Verilen 40M fiyat bilgisi üzerinde kayıt içeren aynı yapıyla 2 tablo:

Tablo 1

product_id price date 
101   5.7  2016/1/1 
102   11.6  2016/1/1 
104   8  2016/1/1 
…   …   … 

Tablo 2

product_id price date 
101   5.9  2016/1/2 
103   20.3  2016/1/2 
104   8  2016/1/2 
…   …   … 

ben her iki tabloda kaç tane product_id var olduğunu öğrenmek istiyorum ve belo kullanıyorum sorguları w aramak için:

SELECT count(*) FROM t1 a,t2 b where a.product_id=b.product_id ; 

SELECT count(*) FROM t1 a,t2 b on a.product_id=b.product_id ; 

O performansını artırmak için herhangi bir yolu yoktur, sonuç almak için yarım saatten fazla sürer?

+1

Bak yukarı açıklamak ve endeksler kullanımı –

+1

Soru tablo yapısı, söz konusu depolama motorunu, EXPLAIN' ve donanım kullanılmakta olan 'çıktısını yoksundur. Performans, sadece sorgunuzu ve kayıt miktarınızı değil, birçok faktöre bağlıdır. Donanım BÜYÜK bir rol oynar. –

cevap

2

En iyi bahsiniz product_id üzerinde bir dizin oluşturmaktır.

bu create index okumak yapmak için yani

create index idx_1 on t1 (product_id); 
create index idx_2 on t2 (product_id);