Alt sorgular vs katıldı
Başka bir şirketten miras kaldığını, uygulamanın yavaş bir bölüm gibi bir alt sorgu yerine bir iç birleşim kullanmam refactored
where id in (select id from ... )
Refactored sorgu yaklaşık 100 kez daha hızlı çalışır.(~50 saniye ~0,3) bir gelişme bekliyordum, ama bir insanın bu kadar ciddi olduğunu açıklayabilir mi? Sütunları yan dizine her yerde kullanılır. SQL where yan tümcesi bir kez satır başı falan sorguyu yürütmek mu?
GüncellemeSonuçları açıklamak:
Fark ikinci bölümünde "kimliği ()," sorgu
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs ile 1 endeksli satır birleştirme:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index
Herkese teşekkürler!
CEVAP
Bir "" (burada durum değerlerini içeren sorgu satır elde bağlıdır yani,) her satır için bir kez çalıştırılır sorgu ilişkili Olmayan-ilişkili alt sorgu koşulu içeren sorgu bağımsız bir () bir zamanlar başında yürütülür. SQL motoru bu ayrım otomatik olarak yapar.
Ama, evet, açıkla-plan kirli detayları verecektir.
Ve benzeri koşulları ile parametre tab...
ToList aramak daha mı() ya da ToArray(...
Mysql tüm sorgular, günlük...
YA da bunun yerine kapsamı sorgular zi...
activerecord içinde alt sorgular...