Bu MySQL alt sorgular yazmak için iyi bir uygulama mı?

3 Cevap php

Ben bazı proje belirli bir amaç için aşağıdaki alt sorguyu yazıyorum:

SELECT count(*) from table1 
WHERE userB='$p' AND userA IN 
  (SELECT userB FROM table1 
   WHERE userA='$row[username]')

PHP bunu yapıyor ya da ben ilk sorgu sonucunu alma ve sonra kayıtları sayma geleneksel şekilde başvurmak gerekir bu iyi bir uygulama olduğunu merak ettim?

3 Cevap

PHP bunu yapıyor ya da ben ilk sorgu sonucunu alma ve sonra kayıtları sayma geleneksel şekilde başvurmak gerekir bu iyi bir uygulama olduğunu merak ettim?

Kenara PHP SQL sorgusu veya saklı yordam kutsal savaşı bırakarak, veritabanına daha az gezileri en iyi uygulamadır. Orada zaman veritabanına öyle & geri recouped ve sorguları ayıran veri sorguları arasında değişen riskini taşır olamaz.

Sorgu kendisi optimize edilebilir? Bu örnekte, potansiyel olarak yes:

SELECT COUNT(*) 
  FROM TABLE t
  JOIN TABLE t2 ON t2.userB = t.userA
               AND t2.userA = '$row[username]'
 WHERE t.userB = '$p'

Eğer gerçekten sorgu performansı hakkında emin olmak istiyorsanız, bir açıklamaya planı üreten ve aşina almak gerekecek ayarlamak sorgu için çıktı ve yorumlama.

What's an Explain Plan?

MySQL planını açıklamak MySQL sorgu iyileştirici en iyi erişim için talep olan verileri sırayla bir SELECT deyimini çalıştırmak için karar nasıl gösterir.

How Do I Generate an Explain Plan?

MySQL, sadece SELECT anahtar kelime önce SELECT sorgusu için anahtar kelimeyi explain, eklemek zorunda. IE:

EXPLAIN SELECT COUNT(*)
          FROM TABLE t
          JOIN TABLE t2 ON t2.userB = t.userA
                       AND t2.userA = '$row[username]'
         WHERE t.userB = '$p'

Muhtemelen daha önce bu sözü olmalıydı, ama sizin için sorgulanan ne dönmeyecek çünkü PHP içinde bu çalıştırmak istemiyorum. Neyse SQL IDE gibi PHPMyAdmin / etc kullanın.

I've Gots My Explain Plan, But What Does it Mean?!

MySQL EXPLAIN documentation döndürülen her sütun üzerinde okumak için iyi bir yerdir, & sütun neyi temsil.

Sürece subquery performans isabet neden olmadığı gibi, ben bir sorgu ayrılmamak için daha iyi olduğunu düşünüyorum. Size yazmak ve hemen hemen her zaman iyi bir şey olduğu, korumak zorunda kodunu en aza indirecektir.

Genel olarak, en veritabanları sorgular daha (sorgu için dönüştürülmüş olabilir) katılır sol ile daha iyi performans.