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

kueri kompleks membutuhkan terlalu banyak waktu untuk mentransfer

Anda memerlukan indeks gabungan pada tabel persimpangan:

ALTER TABLE instruments_tools ADD KEY (id_instrument, id_tool);

Urutan kolom dalam indeks itu penting!

Apa yang Anda harapkan adalah bahwa penggabungan akan dimulai dengan tabel instrumen, kemudian mencari entri indeks yang cocok dalam indeks gabungan berdasarkan id_instrument. Kemudian setelah menemukan entri indeks itu, ia memiliki id_tool terkait secara gratis. Jadi tidak harus membaca tabel instrument_tools sama sekali, cukup membaca entri indeks saja. Itu akan memberikan komentar "Menggunakan indeks" di EXPLAIN Anda untuk tabel instrument_tools.

Itu akan membantu, tetapi Anda tidak dapat menghindari tabel temp dan pengurutan file, karena kolom yang Anda kelompokkan dan urutkan tidak dapat menggunakan indeks.

Anda dapat mencoba membuat MySQL menghindari penulisan tabel temp ke disk dengan meningkatkan ukuran memori yang dapat digunakan untuk tabel sementara:

mysql> SET GLOBAL tmp_table_size = 256*1024*1024;      -- 256MB
mysql> SET GLOBAL max_heap_table_size = 256*1024*1024; -- 256MB

Angka itu hanya sebagai contoh. Saya tidak tahu seberapa besar tabel temp dalam kasus Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat Pengingat Kata Sandi yang Tenang dan mengubah bidang email Pengguna menjadi bidang nama pengguna dengan Laravel 5.0?

  2. Apakah kode berikut valid?

  3. Bagaimana cara menggabungkan tabel dengan SQL?

  4. Apakah ada konvensi penamaan untuk MySQL?

  5. Db::Instance Prestashop