Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih kueri dengan tiga di mana kondisinya lambat, tetapi kueri yang sama dengan kombinasi dua dari tiga di mana kondisinya cepat

Cobalah untuk membagi SQL yang ada menjadi dua bagian dan lihat waktu eksekusi untuk masing-masing bagian. Mudah-mudahan ini akan memberi Anda bagian mana yang bertanggung jawab atas kelambatan:

bagian 1:

SELECT table_1.id
  FROM table_1
  LEFT JOIN table_2
    ON (table_1.id = table_2.id)
 WHERE table_1.col_condition_1 = 0
   AND table_1.col_condition_2 NOT IN (3, 4)
   AND table_2.id is NULL

dan part 2 (perhatikan inner join disini):

SELECT table_1.id
  FROM table_1
  JOIN table_2
    ON (table_1.id = table_2.id)
 WHERE table_1.col_condition_1 = 0
   AND table_1.col_condition_2 NOT IN (3, 4)
   AND table_1.date_col > table_2.date_col

Saya berharap bagian 2 akan memakan waktu lebih lama. Dalam hal ini saya pikir indeks pada table_1 dan table_2 pada date_coll akan membantu.

Saya tidak berpikir indeks komposit akan membantu sama sekali dalam pilihan Anda.

Ini mengatakan sulit untuk mendiagnosis mengapa ketiga kondisi itu bersama-sama akan berdampak buruk pada kinerja. Tampaknya terkait dengan distribusi data Anda. Tidak yakin tentang mySql tetapi di Oracle, koleksi statistik pada tabel tersebut akan membuat perbedaan.

Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan SQL untuk memilih catatan duplikat yang muncul lebih dari 2 kali

  2. GROUP BY cap waktu setiap 15 menit termasuk entri yang hilang

  3. Versi tabel (tabel historis) dan Hubungan tabel pesanan

  4. Apakah file my.ini berada di tempat yang salah?

  5. Model Daftar Kedekatan vs Model Kumpulan Bersarang untuk data hierarki MySQL?