2012-09-13 10 views
5

hiçbir kayıt planı istatistiklerini şuna benzer döndürür: Maliyet: 209.201 Bayt: 187944150 Kardinalite: Artık 409.675Oracle planını açıklamak: Kardinalite çok sayıda döner ama sorgu ben karmaşık bir oracle sql sorgusu yazılı ve açıklamak gelmiş

DBA sorguyu ayarladı ve istatistikler şu şekilde gözüküyor: Maliyet: 42,996 Bayt: 89,874,138 Kardinalite: 209,226

İlk soru şu ki, rakamlar daha düşükse, otomatik olarak daha iyi performans anlamına mı geliyor? En uygun maliyet hangisidir? Maliyet/Kardinallik/Bayt? İkinci sorum şu: Ben ana hatların okunan satır sayısı olduğunu anlıyorum. Ama sorguyu çalıştırdığımda, '0' satırlarını döndürür! Benim izlenimim Kardinalite aynı sonuç kümeleri döndüren gerekiyordu iki sorguları için aynı olmak zorunda olmasıydı. Bu yanlış mıdır?

+0

önem düzeyi satır gerekli olacaktır _thinks_ optimize edici sayısını (basitçe) 'dir; istatistik seviyesi de dahil olmak üzere birçok faktöre bağlı olarak yanlış olabilir. – Ben

+0

Teşekkürler. BYTES'in ne olduğunu açıklayabilir misiniz? – Victor

+1

@Kaushik: belgelerine bakıldığında, 'BYTES' "operasyonu erişilen bayt sayısının sorgu optimizasyonu yaklaşımı ile tahmin" dir. Ama bu yanıltıcıdır, gerçekten operasyon tarafından döndürülen * bayt sayısıdır. Örneğin, tam bir tablo taraması varsa, tablodaki her baytı okur, ancak "BYTES", herhangi bir filtreden * sonra boyutun tahminidür. http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#r22c1-t12 –

cevap

3

Maliyet, byte, kardinalite ... tüm optimizer verilen istatistikler gibi girişlere göre tahminlerdir. Böylece otomatik olarak hiçbir şey ifade etmiyorlar ama bir fikir verebilirler. Oracle Performans Tuning Kılavuzu deyişiyle "Bu bir plan değerlendirirken., Ifadenin gerçek kaynak tüketimini incelemek bir erişim planı belirlemek ve daha sonra durum testi ile optimum bir plan olduğunu kanıtlamak için planı açıklamak kullanmak en iyisidir." 2 soru için

: Teorik olarak eşdeğer sorguları aynı önem düzeyi dönmelidir. Masalarınızın statiği eski olabilir.