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

Mysql terlalu lambat pada kueri sederhana antara dua tabel

Di InnoDB setiap indeks berisi kunci utama secara implisit.

Rencana penjelasan menunjukkan bahwa indeks IDX_NOME digunakan pada tabel Paziente . DBMS mencari nama dalam indeks dan menemukan ID_PAZIENTE di sana, yang merupakan kunci yang kita butuhkan untuk mengakses tabel lainnya. Jadi tidak ada yang perlu ditambahkan. (Dalam DBMS lain kami akan menambahkan indeks komposit pada (NOME, ID_PAZIENTE) agar ini terjadi.)

Lalu ada tabel Analisi mempertimbangkan. Kami menemukan catatan melalui FK_ANALISI_PAZIENTE yang berisi ID_PAZIENTE yang digunakan untuk menemukan kecocokan, dan secara implisit kunci utama ID_ANALISI yang dapat digunakan untuk mengakses tabel, tetapi ini bahkan tidak perlu, karena kita memiliki semua informasi yang kita butuhkan dari index. Tidak ada yang tersisa yang perlu kita temukan di tabel. (Sekali lagi, di DBMS lain kami akan menambahkan indeks komposit pada (ID_PAZIENTE, ID_ANALISI) untuk memiliki indeks penutup.)

Jadi yang terjadi hanyalah:membaca satu indeks untuk membaca indeks lainnya untuk menghitung. Sempurna. Tidak ada yang perlu ditambahkan.

Kami bisa ganti COUNT(analisi0_.ID_ANALISI) dengan COUNT(*) karena yang pertama hanya mengatakan "hitung catatan di mana ID_ANALISI bukan null", yang selalu terjadi sebagai ID_ANALISI adalah kunci utama tabel. Jadi lebih mudah untuk menggunakan yang terakhir dan mengatakan "hitungan catatan". Namun, saya tidak berharap ini mempercepat kueri secara signifikan.

Jadi dari sudut pandang kueri, tidak ada yang mempercepat ini. Berikut adalah hal-hal lebih lanjut yang terlintas dalam pikiran:

  • Tabel yang dipartisi? Tidak, saya tidak akan melihat manfaat dalam hal ini. Itu bisa lebih cepat jika kueri dieksekusi di utas paralel, tetapi sejauh yang saya tahu, tidak ada eksekusi paralel pada banyak partisi di MySQL. (Saya mungkin salah.)
  • Mendefragmentasi tabel? Tidak, tabel itu sendiri bahkan tidak diakses dalam kueri.
  • Itu memberi kita:Beli perangkat keras yang lebih baik. (Maaf tidak memiliki saran yang lebih baik untuk 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. mysql_num_rows():argumen yang diberikan bukan sumber hasil MySQL yang valid

  2. Bisakah php PDO mengambil dua set hasil? Dan Jika ya, apa yang lebih baik 1 set hasil atau lebih dari 1?

  3. Bisakah kita membatasi jumlah baris dalam tabel di MySQL?

  4. Bagaimana menemukan kolom berbeda dalam subquery bersarang di SQL?

  5. Bagaimana cara mendapatkan id yang dimasukkan terakhir dari tabel MySQL