MySQL açıklamasında filtrelenmenin anlamı nedir?


21

Burada MySQL belgelerinde açıklandığı gibi :

Filtrelenen sütun, tablo durumuna göre filtrelenecek tahmini tablo satırlarının yüzdesini gösterir. Yani, satırlar incelenen tahmini satır sayısını gösterir ve × filtrelenen satırlar / 100, önceki tablolarla birleştirilecek satır sayısını gösterir. MySQL 5.7.3'ten önce, EXPLAIN EXTENDED kullanıyorsanız, bu sütun görüntülenir. MySQL 5.7.3'ten itibaren, genişletilmiş çıktı varsayılan olarak etkindir ve EXTENDED anahtar sözcüğü gerekli değildir.

Hala anlamıyorum. Burada "filtrelenmiş" ne anlama geliyor? Bu sütundan hangi bilgileri alabiliriz?

Örneğin, sorgulamaya başladığımda, bazı sorgu 100, bazıları ise 18 veya 100'den düşük gösterecektir.

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  | <--
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | c     | ALL    | PRIMARY | 4       |    1 |   100.00 |

Bu değerden ana sonucumuz ne olabilir?

Sütun sadece% 18 filtrelendi mi? Ya da puan ne kadar düşük olursa, dizin / sorgu o kadar iyi olur?

MySQL 5.7 kullanıyorum

Yanıtlar:


30

Buraya filtre uygulamak, bir typearamanın potansiyel satırlar olarak seçtiği bir satır kümesine koşul uygulamak ve yalnızca koşulu yerine getiren satırları tutmak anlamına gelir:

MySQL önce bir dizin kullanmaya çalışacaktır, örneğin -key'i kullanarak rangetablonuzda bir tarama ayapınız search. Sayı olan bu dizini kullanarak 174 satır çıkacağını tahmin ediyor rows. Bu adıma henüz filtreleme adı verilmez.

Bundan sonra, bu 174 satır ek koşullara karşı kontrol edilmelidir (genellikle sizin whereşartınızda). MySQL artık sadece 32 satır, yani bu 174 satırın% 18'inin bu filtre uygulandıktan sonra kalacağını tahmin ediyor. Bu% 18, içindeki değerdir filtered.

174 yerine 32 satıra sahip olmak daha iyi olsa da (örneğin, daha sonra joinbaşka bir tabloya sahip olmanız gerekiyorsa), "mükemmel" bir dizin size bu 32 satırı doğrudan ilk aramadan verir ve size bakmak için zaman kazandırır. ve tüm potansiyel satırların% 82'sini filtreler.

İle örneğin tam tablo taraması: Daha düşük değerlerde daha iyi bir indeks olabileceğini gösteriyor olabilir Yani rows=1000ve filtered=0.1%bir indeks araması haline gelebilir rows=1ve filtered=100%iyi bir dizini eklerseniz.

Öte yandan, çok iyi tamamen bu göz ardı edebilirsiniz filtereddiğer daha önemli sütunlar üzerinde (çoğu durumda gerçekten kötü bir tahmin zaten olan) -Değer ve odak (özellikle type, keyve extrasorgunuzu optimize etmek için). Örneğin, daha düşük bir değerle sonuçlansa bile a'dan kurtulmak daha iyi olabilir filesort(örneğin, tatmin edici bir indeks kullanarak order by) filtered. Ve daha iyisi type, değişmese veya daha düşük olsa bile, büyük bir performans iyileştirmesine neden olabilir filtered. Örnekte yukarıda filtered=0.1%, type=allzaten bakmadan, bir dizin ekleyerek bu sorguyu geliştirmek mümkün olabilir belirtmek için yeterli olurdu filteredhiç.

Bu yüzden bu değeri çok ciddiye almayın: Ne 100dizinlerinizin iyi olduğu anlamına gelmez ne de düşük bir değer mutlaka kötü dizinleri göstermez. typebunun için çok daha iyi bir göstergedir.


1
Açıkladığınız için teşekkürler. Benim için çok şey açıklıyor. İyi endeksi korumak ve seçmek için yararlı olduğunu düşünüyorum
Iman Tumorang

@ImanTumorang Bu konuda bir açıklama ve örnekler ekledim: bu değeri çok ciddiye alma. Sadece bakarak Sorgunuzla optimize edebilirsiniz typeve extra(kendi başına bir sanat olan); olmadan yaşayabilirsin filteredama olmadan yaşayamazsın type.
Solarflare

Tamam o zaman. Anladım. Mysql Dokümanlarında, performansı nasıl etkilediğini zaten okudum. Açıklamanız için teşekkürler: D
Iman Tumorang

Başka bir ipucu: Filtrelenen hesaplama, birleştirilen son tabloya atlanır. yani, incelenen bazı satırları filtreleyecek koşullar olsa bile% 100 gösterecektir. Bunun mantığı, filtreleme faktörünü tahmin etmenin bir maliyetinin olmasıdır ve bu, son tabloda ise sorgu yürütme planını etkilemez, bu nedenle varsayılan olarak hesaplamayı atlarlar.
Bill Karwin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.