Aynı anda çeşitli veritabanları için SQL yürütme planlarını edinin | Kuvvet Projesi

Yazar | Dong Xuyang TonyDong

Üretildi | CSDN Blogu

Bir yürütme planı (aynı zamanda bir sorgu planı veya bir açıklama planı olarak da adlandırılır), bir dizin veya tam tablo taraması aracılığıyla tablodaki verilere erişmek, bağlantı sorgusunun uygulama yöntemi ve bağlantı sırası vb. Gibi SQL ifadelerini yürütmek için veritabanının belirli adımlarıdır. SQL ifadesi performansı tatmin edici değilse, önce yürütme planına bakmalıyız. Bu makale temel olarak çeşitli veritabanlarında uygulama planının nasıl elde edileceğini ve anlaşılacağını tanıtmakta ve daha derinlemesine analizler için referans dokümanlar vermektedir.

Birçok yönetim ve geliştirme aracı artık MySQL Workbench, Oracle SQL Developer, SQL Server Management Studio, DBeaver, vb. Gibi grafiksel yürütme planlarını görüntüleme işlevini sağlıyor; ancak bu tür araçları kullanma niyetinde değiliz, ancak veritabanı tarafından sağlanan komutları sunuyoruz Uygulama planını görüntüleyin.

İlk olarak, çeşitli veritabanlarında yürütme planlarını görüntülemenin basit bir özetini veriyoruz:

Bu makalede kullanılan örnek tablolar ve veriler için "SQL Tanıtım Öğreticisi" örnek veritabanı (https://tonydong.blog.csdn.net/article/details/86518676) bağlantısını tıklayabilirsiniz.

MySQL yürütme planı

MySQL'de yürütme planını edinme yöntemi çok basittir, yani EXPLAIN anahtar sözcüğünü SQL deyiminin önüne ekleyin:

AÇIKLAMAK E.first_name, e.last_name, e.salary, d.department_name SEÇİN Çalışanlardan e JOIN departments d ON (e.department_id = d.department_id) NEREDE e. Maaş > 15000;

Bu ifadeyi yürütmek, 12 sütun bilgi içeren bir tablo yürütme planı döndürür:

id | seçme_türü | tablo | bölümler | tür | olası anahtarlar | anahtar | anahtar_len | başvuru | satırlar | filtrelenmiş | Ekstra | - | ----------- | ----- | ---------- | ------ | ----------- ------ | ------- | ------- | -------------------- | ---- | - ------- | ----------- | 1 | BASİT | e | | TÜMÜ | emp_department_ix | | | | 107 | 33.33 | Where kullanma | 1 | BASİT | d | | eq_ref | BİRİNCİL | BİRİNCİL | 4 | hrdb.e.department_id | 1 | 100 | |

MySQL'de EXPLAIN; SELECT, DELETE, INSERT, REPLACE ve UPDATE ifadelerini destekler.

Daha sonra yapmamız gereken, bu alanların uygulama planındaki anlamını anlamaktır. Aşağıdaki tablo, MySQL yürütme planındaki her alanın rolünü listeler:

Yukarıdaki örnek için yalnızca bir SELECT yan tümcesi vardır ve kimlik 1'dir. İlk olarak, çalışanlar tablosunda tam bir tablo taraması (tür = ALL) gerçekleştirilir ve 107 satırlık veri işlenir. WHERE koşuluyla filtrelendikten sonra, verilerin% 33,33'ünün kaldığı tahmin edilir (tahmini Hatalı); Daha sonra bu veriler için, eşleşen veri satırını bulmak için bölümler tablosunun birincil anahtarını (anahtar = BİRİNCİL) kullanın (tür = eq_ref, satırlar = 1).

Gerçek yürütme süresi gibi ek bilgileri görüntülemek için MySQL 8.0'ın yeni ANALYZE seçeneğini kullanın:

ANALİZİ AÇIKLAYIN E.first_name, e.last_name, e.salary, d.department_name SEÇİN Çalışanlardan e JOIN departments d ON (e.department_id = d.department_id) NEREDE e. Maaş > 15000; - > İç içe döngü iç birleştirme (maliyet = 23.43 satır = 36) (gerçek zaman = 0.325..1.287 satır = 3 döngü = 1) - > Filtre: ((e. Maaş > 15000.00) ve (e. Bölüm_kimliği değil)) (maliyet = 10.95 satır = 36) (gerçek zaman = 0.281..1.194 satır = 3 döngü = 1) - > E üzerinde tablo taraması (maliyet = 10.95 satır = 107) (gerçek zaman = 0.266..0.716 satır = 107 döngü = 1) - > PRIMARY (departman_kimliği = e. Bölüm_kimliği) (maliyet = 0.25 satır = 1) (gerçek zaman = 0.013..0.015 satır = 1 döngü = 3) kullanarak tek satırlık dizin araması

Bunların arasında, İç içe döngü iç birleştirme, iki tabloyu birbirine bağlamak için iç içe döngü birleştirmeyi kullanmak anlamına gelir ve çalışanlar sürüş tablosudur. Maliyet tahmini maliyeti temsil eder, satırlar döndürülen tahmini satır sayısını temsil eder; gerçek zaman, ilk satırı ve tüm veri satırlarını döndürmek için geçen gerçek zamanı gösterir, aşağıdaki satırlar yineleyici tarafından döndürülen satırların sayısını ve döngüler yineleyicinin yineleme sayısını temsil eder.

MySQL EXPLAIN komutunun kullanımı ve parametreleri için MySQL resmi belge EXPLAIN ifadesine (https://dev.mysql.com/doc/refman/8.0/en/explain.html) başvurabilirsiniz.

MySQL yürütme planının çıktı bilgileriyle ilgili olarak, sorgu yürütme planını anlamak için MySQL resmi belgesine başvurabilirsiniz (https://dev.mysql.com/doc/refman/8.0/en/execution-plan-information.html).

Oracle yürütme planı

Oracle, yürütme planını görüntülemek için çeşitli yöntemler sağlar, bu makale aşağıdaki yöntemleri kullanır:

  • Yürütme planını oluşturmak ve kaydetmek için EXPLAIN PLAN FOR komutunu kullanın;

  • Kaydedilen yürütme planını görüntüleyin.

  • İlk önce bir yürütme planı oluşturun:

    PLANI AÇIKLAYIN E.first_name, e.last_name, e.salary, d.department_name SEÇİN Çalışanlardan e JOIN departments d ON (e.department_id = d.department_id) NEREDE e. Maaş > 15000;

    EXPLAIN PLAN FOR komutu SQL ifadesini çalıştırmaz, bu nedenle oluşturulan yürütme planı, ifade çalıştırıldığında gerçek planla aynı olmayabilir.

    Bu komut, oluşturulan yürütme planını PLAN_TABLE genel geçici tablosuna kaydeder ve ardından yürütme planını tabloda biçimlendirmek ve görüntülemek için DBMS_XPLAN sistem paketindeki saklı yordamı kullanır. Aşağıdaki ifade, mevcut oturumdaki son yürütme planını görüntüleyebilir:

    TABLEDEN SEÇ * (DBMS_XPLAN.display); PLAN_TABLE_OUTPUT | -------------------------------------------------- ------------------------------------------ | Plan karma değeri: 1343509718 | | -------------------------------------------------- ------------------------------------------ | | Kimlik | İşlem | Ad | Satırlar | Bayt | Maliyet (% CPU) | Zaman || -------------------------------------------------- ------------------------------------------ | | 0 | İFADE SEÇ | | 44 | 1672 | 6 (17) | 00:00:01 || | 1 | BİRLEŞTİRME BİRLEŞTİRME | | 44 | 1672 | 6 (17) | 00:00:01 || | 2 | INDEX ROWID | BÖLÜMLERE GÖRE TABLO ERİŞİMİ | 27 | 432 | 2 (0) | 00:00:01 || | 3 | DİZİN TAM TARAMA | DEPT_ID_PK | 27 | | 1 (0) | 00:00:01 || | * 4 | SIRALA BİRLEŞTİR | | 44 | 968 | 4 (25) | 00:00:01 || | * 5 | MASA ERİŞİMİ TAM | ÇALIŞANLAR | 44 | 968 | 3 (0) | 00:00:01 || -------------------------------------------------- ------------------------------------------ | | Tahmin Bilgileri (işlem kimliği ile tanımlanır): | -------------------------------------------------- - | | 4-erişim ("E". "DEPARTMENT_ID" = "D". "DEPARTMENT_ID") | filtre ("E". "DEPARTMENT_ID" = "D". "DEPARTMENT_ID") | 5 filtreli ("E". "MAAŞ" > 15000) |

    Oracle'da EXPLAIN PLAN FOR, SELECT, UPDATE, INSERT ve DELETE ifadelerini destekler.

    Daha sonra, yürütme planındaki çeşitli bilgilerin anlamını da anlamamız gerekir:

    • Plan karma değeri, ifadenin karma değeridir. SQL deyimleri ve yürütme planları kitaplık önbelleğinde saklanacaktır.Aynı hash değerine sahip deyimler, yazılım analizi olan mevcut yürütme planlarını yeniden kullanabilir;

    • Kimlik bir sıra numarasıdır, ancak yürütme sırasını temsil etmez. Yürütme sırası girintiye göre değerlendirilir, daha fazla girintili, ilk çalıştırılır ve aynı girinti yukarıdan aşağıya doğru yürütülür. Id'nin önündeki yıldız işareti, yüklem yargısının kullanıldığını gösterir, aşağıdaki Tahmin Bilgisine bakın;

    • İşlem, mevcut işlemi, yani tablonun verilerine nasıl erişileceğini, tablonun nasıl bağlanacağını, sıralama işlemlerinin nasıl gerçekleştirileceğini temsil eder;

    • Ad, bu nesnelerin mevcut işlemde yer alması koşuluyla, erişilen tablonun, dizinin veya alt sorgunun adını gösterir;

    • Satırlar, Oracle tarafından tahmin edilen geçerli işlem tarafından döndürülen satırların sayısıdır ve aynı zamanda kardinalite olarak da adlandırılır;

    • Bayt, Oracle tarafından tahmin edilen mevcut operasyonda yer alan veri miktarıdır

    • Maliyet (% CPU), Oracle'ın işlemi gerçekleştirmek için hesapladığı maliyettir;

    • Süre, Oracle'ın işlemi gerçekleştirmek için ihtiyaç duyduğu tahmini süredir;

    • Tahmin Bilgileri Id ile ilgili dayanak bilgilerini görüntüler. Erişim, verilere erişilme şeklini etkileyen erişim koşuludur (tablonun taranması veya indeks yoluyla); filtre, filtreleme koşuludur ve veriler, veriler alındıktan sonra duruma göre filtrelenir.

    Yukarıdaki örnekte, Id'nin yürütme sırası 3'tür. > 2 - > 5- > 4- > 1. İlk olarak, Id = 3 DEPT_ID_PK, Id = 2 birincil anahtar dizinini tarayın, ROWID birincil anahtarına göre DEPARTMENTS tabloya erişin, sonuçlar sıralandı; ikinci, Id = 5 tam tablo tarama erişimi ÇALIŞANLAR ve verileri filtrelemek için filtre kullanın, Id = 4, departman numarasına göre sıralama ve filtreleme ; Son olarak, birleştirme bağlantısını gerçekleştirmek için Id = 1. Açıkçası, burada Oracle, iki tablonun bağlantısını gerçekleştirmek için birleştirme bağlantısını sıralama yolunu seçmiştir.

    Oracle yürütme planı ve SQL ayarı için, resmi Oracle belgesi "SQL Ayarlama Kılavuzu" na (https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/) bakabilirsiniz.

    SQL Server yürütme planı

    SQL Server Management Studio, grafik yürütme planını görüntülemek için basit bir yol sağlar; burada komutlar aracılığıyla görüntüleme için bir yol sunuyoruz:

    İSTATİSTİK PROFİLİ AYARLA

    Yukarıdaki komut SQL Server deyim analizi işlevini açabilir ve açıldıktan sonra yürütülen ifade ayrıca ilgili yürütme planını döndürür:

    E.first_name, e.last_name, e.salary, d.department_name SEÇİN Çalışanlardan e JOIN departments d ON (e.department_id = d.department_id) NEREDE e. Maaş > 15000; ilk_adı | soyadı | maaş | departman_adı | ---------- | --------- | -------- | --------------- | Steven | Kral | 24000.00 | Yönetici | Neena | Kochhar | 17000.00 | Yönetici | Lex | De Haan | 17000.00 | Yönetici | Satırlar | Yürütme | StmtText | StmtId | DüğümKimliği | Üst Öğe | FizikselOp | MantıksalOp | Bağımsız Değişken | Tanımlı Değerler | TahminSüreleri | TahminIO | Tahmin CPU | OrtRowSize | ToplamAltAğaçMüşteri | ÇıktıListesi | Uyarılar | Tür | Paralel | Tahminİfadeleri | ---- | -------- | ------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------- | ------ | ------ | ------ | ------------------- - | -------------------- | --------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ | ------------- -------------------------------------------------- ----- | ------------ | ------------ | ----------- | ------ ---- | ---------------- | ---------------------------- ------------------------------------------ | ------- - | -------- | -------- | ------------------ | 3 | 1 | SEÇİN e.first_name, e.last_name, e.salary, d.department_name¶ çalışanlardan e¶ JOIN departments d ON (e.department_id = d.department_id) ¶ WHERE e.salary > 15000 | 1 | 1 | 0 | | | | | 2.9719627 | | | | 0.007803641 | | | SEÇ | 0 | | 3 | 1 | | - İç içe Döngüler (İç Birleştirme, DIŞ REFERANSLAR :(.)) | 1 | 2 | 1 | İç içe Döngüler | İç Birleştirme | DIŞ REFERANSLAR :(.) | | 2.9719627 | 0 | 0 | 57 | 0.007803641 |.,.,.,. | | PLAN_ROW | 0 | 1 | 3 | 1 | | --Kümelenmiş Dizin Taraması (NESNE: [... AS), NEREDE: (... as. > (15000.00))) | 1 | 3 | 2 | Kümelenmiş Dizin Taraması | Kümelenmiş Dizin Taraması | NESNE: (... AS), NEREDE: (... as. > (15000.00)) |.,.,.,. | 3 | 0.0038657407 | 2.747E-4 | 44 | 0.004140441 |.,.,.,. | | PLAN_ROW | 0 | 1 | 3 | 3 | | - Kümelenmiş Dizin Arama (NESNE: [... AS), ARAMA: (. = ... olarak) İLERİ SİPARİŞ EDİLDİ) | 1 | 4 | 2 | Kümelenmiş Dizin Arama | Kümelenmiş Dizin Arama | NESNE : (... AS), SEEK: (. = ... as.) SİPARİŞ VERİLDİ |. | 1 | 0.003125 | 1.581E-4 | 26 | 0.0035993 |. | | PLAN_ROW | 0 | 3 |

    SQL Server'daki yürütme planı SELECT, INSERT, UPDATE, DELETE ve EXECUTE ifadelerini destekler.

    SQL Server yürütme planının her adımının yürütme sırası, girintiye, daha fazla girintili, ilk yürütmeye ve yukarıdan aşağıya aynı girintili yürütmeye göre değerlendirilir. Ardından, yürütme planındaki çeşitli bilgilerin anlamını anlamamız gerekir:

    • Satırlar, bu adımda gerçekten üretilen kayıtların sayısını temsil eder;

    • Yürütme sayısı, adımın gerçekte kaç kez yürütüldüğünü temsil eder;

    • StmtText, her adımın ayrıntılı bir açıklamasını içerir; yani, tablo verilerine nasıl erişilir ve bunlara nasıl filtre uygulanır, tablolar nasıl bağlanır, işlemlerin nasıl sıralanacağı vb .;

    • StmtId, cümlenin numarası;

    • Geçerli işlem adımının düğüm numarası olan Düğüm Kimliği, yürütme sırasını temsil etmez;

    • Geçerli işlem adımının ebeveyn düğümü olan üst öğe, önce çocuk düğümü yürütür ve sonra ana düğümü yürütür;

    • PhysicalOp, bağlantı işlemlerinin iç içe döngü uygulaması gibi fiziksel işlemler;

    • LogicalOp, dahili bağlantı işlemi gibi mantıksal işlem;

    • Argüman, işlemde kullanılan parametre;

    • DefinedValues, tanımlı değişken değerleri;

    • EstimateRows, döndürülen satırların sayısını tahmin edin;

    • EstimateIO, tahmini GÇ maliyeti;

    • Tahmini CPU, tahmini CPU maliyeti;

    • AvgRowSize, döndürülen ortalama satır boyutu;

    • TotalSubtreeCost, mevcut düğümün birikmiş maliyeti;

    • OutputList, geçerli düğümün alan listesi çıktısı;

    • Uyarılar, tahmini uyarı bilgileri;

    • Mevcut işlem adımının türü;

    • Paralel, paralel olarak çalıştırılıp çalıştırılmayacağı;

    • EstimateExecutions, bu adımın kaç kez yürütülmesinin beklendiği;

    Yukarıdaki ifade için, düğüm yürütme sırası 3'tür. > 4- > 2 - > 1. İlk önce üçüncü satırı çalıştırın, çalışanlar tablosunu kümelenmiş dizini (birincil anahtar) tarayın ve 3 satır veri döndürmek için filtre uygulayın, tahmini satır sayısı (3.0841121673583984) buna çok yakın; sonra dördüncü satırı çalıştırın, bulmak için kümelenmiş dizini dairesel olarak kullanın Departmanlar tablosu 3 kez döngü yapar ve her seferinde 1 satır veri döndürür; ikinci satır üst düğümdür, bu da İç Birleştirmeyi uygulamak için İç içe Döngülerin kullanılması anlamına gelir ve Bağımsız Değişken sütunu (DIŞ REFERANSLAR :(.)) Sürüş tablosunun çalışanlar olduğunu gösterir; satır 1 Sorgunun tamamını temsil eder ve gerçek işlemleri gerçekleştirmez.

    Son olarak, aşağıdaki komutla ifadenin analiz işlevini kapatabilirsiniz:

    İSTATİSTİK PROFİLİ KAPALI AYARLA

    SQL Server yürütme planı ve SQL ayarı için SQL Server resmi belge yürütme planına başvurabilirsiniz.

    PostgreSQL yürütme planı

    PostgreSQL'de yürütme planını elde etme yöntemi MySQL'inkine benzer, yani SQL deyiminin önüne EXPLAIN anahtar sözcüğünü ekleyerek:

    AÇIKLAMAK E.first_name, e.last_name, e.salary, d.department_name SEÇİN Çalışanlardan e JOIN departments d ON (e.department_id = d.department_id) NEREDE e. Maaş > 15000; SORGU PLANI | -------------------------------------------------- -------------------- | Hash Join (maliyet = 3.38..4.84 satır = 3 genişlik = 29) | Karma Koşul: (d.department_id = e.department_id) | - > Departmanlarda Sıralı Tarama d (maliyet = 0.00..1.27 satır = 27 genişlik = 15) | - > Hash (maliyet = 3.34..3.34 satır = 3 genişlik = 22) | - > Çalışanlar için Seq Tarama (maliyet = 0.00..3.34 satır = 3 genişlik = 22) | Filtrele: (maaş > '15000' :: sayısal) |

    PostgreSQL'de EXPLAIN; SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE, CREATE TABLE AS ve CREATE MATERIALIZED VIEW AS ifadelerini destekler.

    PostgreSQL yürütme planının sırası girintileme ile değerlendirilir.Plan ne kadar girintili olursa ilk önce çalıştırılır ve aynı girintili yürütme planı yukarıdan aşağıya doğru yürütülür. Yukarıdaki örnek için, önce maaş kullanarak çalışanlar tablosunda tam bir tablo taraması (Sıralı Tarama) gerçekleştirin. > Filtre koşulu olarak 15000; maliyet sırasıyla ilk satırı (0,00) döndürmenin tahmini maliyetini ve tüm satırları döndürmenin maliyetini (3,34) gösterir; satırlar, döndürülen tahmini satır sayısını temsil eder; genişlik, tahmini dönüş satırı boyutunu (birim Bayt). Daha sonra tarama sonucunu bellek karma tablosuna koyun.Her iki maliyet de 3.34'e eşittir çünkü tüm veriler tarandıktan sonra tek seferde hesaplanır ve karma tablosunda saklanır. Daha sonra, departmanları tarayın ve departman_id'ye göre hash değerini hesaplayın ve ardından bunu önceki hash tablosu (d.department_id = e.department_id) ile eşleştirin. Üst satır, veritabanının birleştirme işlemini uygulamak için Hash Join kullandığını gösterir.

    PostgreSQL'de EXPLAIN, ifadenin gerçek çalışma süresini ve daha fazla bilgiyi görüntülemek için ANALYZE seçeneğini de kullanabilir:

    ANALİZİ AÇIKLAYIN E.first_name, e.last_name, e.salary, d.department_name SEÇİN Çalışanlardan e JOIN departments d ON (e.department_id = d.department_id) NEREDE e. Maaş > 15000; SORGU PLANI | -------------------------------------------------- -------------------------------------------------- ------------ | Hash Join (maliyet = 3.38..4.84 satır = 3 genişlik = 29) (gerçek zaman = 0.347..0.382 satır = 3 döngü = 1) | Karma Koşul: (d.department_id = e.department_id) | - > Departmanlarda Sıralı Tarama d (maliyet = 0.00..1.27 satır = 27 genişlik = 15) (gerçek zaman = 0.020..0.037 satır = 27 döngü = 1) | - > Hash (maliyet = 3.34..3.34 satır = 3 genişlik = 22) (gerçek zaman = 0.291..0.292 satır = 3 döngü = 1) | Paketler: 1024 Gruplar: 1 Bellek Kullanımı: 9kB | - > Çalışanlar için Sıralı Tarama e (maliyet = 0.00..3.34 satır = 3 genişlik = 22) (gerçek zaman = 0.034..0.280 satır = 3 döngü = 1) | Filtrele: (maaş > '15000' :: sayısal) | Filtreden Kaldırılan Satırlar: 104 | Planlama Süresi: 1,053 ms | Yürütme Süresi: 0,553 ms |

    EXPLAIN ANALYZE ifadeyi çalıştırarak daha fazla bilgi elde etti. Bunlar arasında, gerçek süre, her bir yinelemede (ms) gerçekte harcanan ortalama süredir ve aynı zamanda başlangıç zamanı ve tamamlanma süresine bölünür; döngüler yineleme sayısını temsil eder; Karma işlemi ayrıca kova sayısını (Kepçeler), kümeleri (Gruplar) ve doluluğu gösterir. Bellek Kullanımı, 1'den büyük gruplar, diskte geçici depolamanın kullanılması gerektiği anlamına gelir; Planlama Zamanı, yürütme planını oluşturma zamanıdır; Yürütme Zamanı, Planlama Zamanı hariç, ifadeyi yürütmek için gerçek zamandır.

    PostgreSQL'in yürütme planı ve performans optimizasyonu ile ilgili olarak, resmi PostgreSQL belgesi performans ipuçlarına bakabilirsiniz (https://www.postgresql.org/docs/12/performance-tips.html).

    SQLite yürütme planı

    SQLite ayrıca SQL ifadesinin yürütme planını almak için EXPLAIN QUERY PLAN komutunu sağlar:

    sqlite > SORGU PLANINI AÇIKLAYIN ... > E.first_name, e.last_name, e.salary, d.department_name SEÇİN ... > Çalışanlardan e ... > JOIN departments d ON (e.department_id = d.department_id) ... > NEREDE e. Maaş > 15000; SORGU PLANI | --SCAN TABLE çalışanları AS e INTEGER PRIMARY KEY KULLANARAK TABLO departmanlarını ARA (rowid =?)

    SQLite'daki EXPLAIN QUERY PLAN, SELECT, INSERT, UPDATE, DELETE ve diğer ifadeleri destekler.

    SQLite yürütme planı da girintili olarak görüntülenir.Plan ne kadar girintili çıkarsa ilk önce çalıştırılır ve aynı girintili yürütme planı yukarıdan aşağıya doğru yürütülür. Yukarıdaki örnek önce çalışanlar tablosunu tarar ve ardından sonucun birincil anahtarına göre departmanlardaki verileri arar. SQLite yalnızca iç içe döngüler birleştirme olan bir bağlantı uygulamasını destekler.

    Ek olarak, SQLite'deki basit EXPLAIN, ifadeyi yürüten sanal makine talimat dizisini görüntülemek için de kullanılabilir:

    sqlite > AÇIKLAMAK ... > E.first_name, e.last_name, e.salary, d.department_name SEÇİN ... > Çalışanlardan e ... > JOIN departments d ON (e.department_id = d.department_id) ... > NEREDE e. Maaş > 15000; addr opcode p1 p2 p3 p4 p5 yorum ---- ------------- ---- ---- ---- ------------- - ------ ------- 0 Başlatma 0150 0015 Başlama 1 OpenRead 05 01100 kök = 5 iDb = 0; çalışanlar 2 OpenRead 12 02 00 kök = 2 iDb = 0; bölümler 3 Geri Sar 0140 004 Sütun 07 100 r = çalışanlar. Maaş 5 Le 2131 (İKİLİ) 53 eğer r < = r 13'e git 6 Sütun 0103 00 r = çalışanlar. Bölüm_kimliği 7 SeekRowid 1133 00 intkey = r 8 Sütun 01 400 r = çalışanlar. İlk_adı 9 Sütun 02 500 r = çalışanlar.last_name 10 Sütun 07 600 r = çalışanlar. Maaş 11 Sütun 11 700 r = departments.department_name 12 ResultRow 44 000 çıkış = r 13 Sonraki 0 40 0114 Durdur 00 00015 İşlem 00 80 01 usesStmtJournal = 016 Tam Sayı 150002 000 r = 1500017 Git 01 000

    SQLite'ın yürütme planı ve iyileştiricisi hakkında bilgi için, sorgu planını açıklamak üzere resmi SQLite belgelerine bakabilirsiniz.

    Telif hakkı uyarısı: Bu makale, CSDN blog yazarı "Dong Xuyang TonyDong" un orijinal makalesidir.

    Uzun mesafeli toplantı her zaman takılıp kalıyor? 8 "Xiaobai" yöntemi bir bakışta görülebilir
    önceki
    BlackBerry telefonları durdurulacak; üç büyük operatör: Ücret borcu olan kullanıcılar salgın önleme ve kontrol döneminde durmayacak; Chrome testi, arama sonuçları sayfası URL'lerini kaldırıyor | Geek
    Sonraki
    Bir tren istasyonu özel polisi tarafından Fare Yılı Bahar Şenliği: "Daha az insan olmasına rağmen, daha çok endişeleniyorum"
    Önümüzdeki yılın Bahar Şenliği için ayrılmış 5.000 karakterlik elektrikli otomobil kış hileleri
    BYD 5 yıl "genişleme", Han EV / DM veya 256.900 satış harcıyor
    Bunları iyi yapmak salgın riskini en aza indirebilir
    Yasal sistem en üst sırada yer alır ve Takata Hava Yastığı Ocak geri çağırma listesinde "yok"
    Skoda'nın yeni Octavia ile ilgili beş soru, değişimden sonra gücü nasıl artacak?
    İlkbaharın ilk gününde tüm bitkiler tomurcuklanır.
    38 inç kavisli ekran "büyük" ve yeni Escalade sürprizleri bundan çok daha fazlası
    Wuhan, dört tür yeni koroner pnömoni hastasını toplamaya ve tedavi etmeye başladı
    Otomobil hisselerinde 72 saatlik iniş ve çıkışlar: Neden en çok kaybedenler ve kazananlar TA?
    Salgından sonra evde bir şeyler satın alamaz mısınız? bulunmuyor! Jinan, bu teknik olarak becerikli bayan bunu uzaktan kumandalı bir arabayı çalıştırarak yapabilir.
    200.000 yerli Tesla'dan daha iyidir, Festa EV satılır veya 164.800 yuan
    To Top