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

prosedur tersimpan mysql lebih lambat 20 kali dari kueri standar

Hanya menebak:

Saat Anda menjalankan kueri dengan tangan, ekspresi WHERE ('test' IS NULL or COL1 = 'test') dapat dioptimalkan ketika kueri sedang diuraikan. Pengurai dapat melihat bahwa string 'test' bukan nol, jadi ini mengubah tes menjadi WHERE COL1 = 'test' . Dan jika ada indeks di COL1 ini akan digunakan.

Namun, saat Anda membuat prosedur tersimpan, penguraian terjadi saat prosedur dibuat. Saat itu, tidak tahu apa @param akan, dan harus mengimplementasikan kueri sebagai pemindaian tabel berurutan.

Coba ubah prosedur Anda menjadi:

IF @param IS NULL
THEN BEGIN
  SELECT * FROM table1
  UNION ALL
  SELECT * FROM table2
  ...
END;
ELSE BEGIN
  SELECT * FROM table1 WHERE col1 = @param
  UNION ALL
  SELECT * FROM table2 WHERE col1 = @param
  ...
END;
END IF;

Saya tidak memiliki banyak pengalaman dengan prosedur tersimpan MySQL, jadi saya tidak yakin itu semua sintaks yang benar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks bulan Objek Tanggal JavaScript dimulai dengan 0

  2. mengapa saya mendapatkan kesalahan sintaks untuk pernyataan yang disiapkan?

  3. Cara Mengotomatiskan Migrasi dari Standalone MySQL ke Galera Cluster menggunakan Ansible

  4. MYSQL Kiri Gabung COUNTS dari beberapa tabel

  5. Cara menonaktifkan opsi only_full_group_by di Laravel