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

Permintaan Pencarian MySQL untuk Nama yang Dipisahkan Koma

Ya, jika ada kemungkinan Anda dapat menempatkan keduanya last, first dan first last ke dalam database, cara yang lebih baik adalah mendesain skema Anda dengan benar.

Jika Anda pernah menemukan diri Anda mencoba mencari, atau memanipulasi, bagian kolom, skema Anda hampir pasti rusak. Ini hampir pasti akan mematikan kinerja.

Cara yang benar adalah dengan membuat tabel sebagai berikut:

T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Kemudian Anda dapat lebih efisien membagi nama yang dimasukkan pengguna (sekali, sebelum menjalankan kueri) daripada mencoba membagi setiap nama dalam database.

Dalam hal database selalu memegang last, first , mungkin sebenarnya tidak diperlukan untuk perubahan skema.

Masalah yang Anda miliki dalam kasus itu hanyalah salah satu interpretasi dari apa yang dimasukkan pengguna.

Satu kemungkinan, meskipun merupakan pembunuh kinerja, adalah melakukan like untuk setiap kata yang terpisah. Jadi, jika pengguna memasukkan pax diablo , kueri yang dihasilkan mungkin:

select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

Dengan begitu, Anda tidak terlalu peduli dengan pesanan.

Namun, mengingat ketidaksukaan saya terhadap kueri yang lambat, saya akan mencoba menghindarinya kecuali benar-benar diperlukan (atau database Anda relatif kecil dan cenderung tetap seperti itu).

Ada berbagai cara untuk mempercepat kueri semacam ini, seperti:

  • menggunakan kemampuan pencarian teks lengkap apa pun yang dimiliki DBMS Anda.
  • meniru kemampuan tersebut dengan mengekstrak dan menyimpan kata-kata selama pemicu penyisipan/pembaruan (dan menghapusnya selama pemicu penghapusan).
  • kasus sebelumnya, tetapi juga memastikan kolom tambahan digunakan dengan nilai huruf kecil dari kolom saat ini (untuk kecepatan).
  • memberi tahu pengguna bahwa mereka perlu menggunakan last, first formulir untuk mencari.
  • mencoba menghindari %something% cari string sebanyak mungkin (dengan something% , indeks masih dapat digunakan).
  • metode "membagi nama menjadi dua kolom" yang saya sebutkan sebelumnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jalankan file *.sql dengan python MySQLdb

  2. Tab Bootstrap Dinamis menggunakan PHP/MySQL

  3. INDIA, Skrip Pencari Kode STD di PHP, MYSQL, JQUERY

  4. Simpan beberapa baris dari database mysql menjadi satu variabel tunggal

  5. Kerangka Entitas MySQL tinyint(1) System.Boolean.Parse FormatException