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

Mysql query yang sama satu dengan indeks detik tanpa mendapatkan waktu 10000xFetch?

OR UPPER(lu.opis) LIKE UPPER('%SomeName%')

memiliki 3 masalah kinerja:

  • OR kurang dioptimalkan. Pada dasarnya, tabel harus dipindai untuk memeriksa semua baris. Indeks tidak mungkin membantu.
  • UPPER(indexed-column) mencegah menggunakan indeks pada kolom itu. Ini mudah diselesaikan dengan mendeklarasikan kolom itu memiliki COLLATION itu "tidak peka huruf besar-kecil" -- yaitu, sesuatu seperti utf8_unicode_ci; perhatikan _ci .
  • LIKE '%... tidak dapat menggunakan indeks karena terkemuka karakter pengganti.

Selain itu, biasanya bodoh untuk memiliki

32497 row(s) returned

Apa yang akan Anda lakukan dengan banyak baris itu? Waktu transfer jaringan akan signifikan, meskipun kueri itu sendiri tidak.

Untuk "menyelesaikan" LIKE , OR , dan UPPER masalah sekaligus, kumpulkan teks menjadi satu kolom dalam satu tabel. Kemudian berikan FULLTEXT indeks pada kolom tersebut. MATCH ... AGAINST ... akan berjalan jauh lebih cepat -- setidaknya untuk melakukan SomeName Cari. (LEFT JOINs adalah masalah lain.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WAMP abaikan my.ini

  2. Peringatan:mysqli_connect():(HY000/1049):Database tidak dikenal hanya di terminal mac

  3. SQL jika bukan pembaruan nol

  4. PHP MYSQL - Mengisi baris bernomor tabel HTML berdasarkan apakah mereka cocok dengan nomor baris

  5. Bagaimana saya bisa mendapatkan emacs sql-mode untuk menggunakan file konfigurasi mysql (.my.cnf)?