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

Pemilihan MySQL tampaknya sangat lambat tetapi tidak dapat memikirkan bagaimana cara meningkatkannya?

Saya rasa ada beberapa masalah dengan kueri dan definisi tabel itu sendiri.

  • Table.name adalah kolom karakter 4K
  • Kueri diurutkan menurut kolom itu

Anda mengurutkan berdasarkan kolom tempat Anda menyimpan string. Untuk mengurutkan berdasarkan string, perbandingan string harus dilakukan. Perbandingan string cenderung menjadi operasi yang lambat dan, mengingat ukuran kolom yang Anda gunakan, kemungkinan besar akan menyebabkan kinerja yang mencolok.

Kami tidak memiliki indikasi isi name Anda kolom dan tampaknya sulit untuk memikirkan nama sebenarnya yang membutuhkan itu banyak karakter.

Jika string ini memiliki beberapa bagian data yang secara konseptual berbeda, mungkin kolom tersebut harus dipecah menjadi beberapa kolom terpisah, jika memungkinkan, dan kemudian dinormalisasi sebagaimana mestinya.

Jika Anda dapat memecah konten kolom itu menjadi beberapa yang lebih kecil dan kemudian menggunakannya, perbandingan string, meskipun masih mahal, akan 'lebih cepat' hanya karena string yang dibandingkan akan jauh lebih pendek daripada sekarang.

Hal lain yang perlu dipertimbangkan adalah jika Anda dapat mengoptimalkan pencarian dengan menghindari perbandingan string sama sekali atau dengan menghindari kueri yang akan menyebabkan pemindaian tabel penuh meskipun Anda telah menetapkan indeks.

Untuk itu Anda harus melihat menggunakan explain dengan kueri Anda, sehingga Anda bisa lebih memahami Rencana Eksekusi Kueri

Mengutip dokumen (penekanan saya):

Edit 1

Anda telah mengklarifikasi bahwa name your Anda kolom sebenarnya untuk catatan pengguna. Dalam hal ini, saya pikir Anda harus mempertimbangkan hal berikut (sebagai tambahan untuk apa yang telah disebutkan):

  1. Ganti nama kolom menjadi sesuatu yang berkorelasi dengan konten sebenarnya
  2. Hapus indeks dari kolom
  3. Jangan jangan gunakan kolom itu untuk mencari, menyortir, atau operasi lain apa pun selain hanya memilihnya untuk menampilkannya (Ini akan menjadi sangat langka jika perlu digunakan untuk hal lain, IMHO.)
  4. Opsional, pertimbangkan untuk mengubah kolom menjadi text ketik dan Anda tidak perlu terlalu khawatir tentang esai pengguna terpotong tanpa peringatan (kecuali GUI telah memberlakukan batas panjang input yang sama kepada pengguna)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Secara efektif memilih catatan (jarak) terdekat dari database

  2. Memperbarui tabel di pemicu setelah memperbarui di tabel yang sama

  3. MySQL CHAR() vs T-SQL CHAR():Apa Bedanya?

  4. ubah tabel tambahkan ... sebelum `kode`?

  5. Tidak ada paket msyql-server yang tersedia