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

Sintaks MySQL dan Kinerja 'ATAU'

Jawaban Jason tepat. Selain itu, saya akan mencoba menggunakan sintaks gabungan ANSI yang lebih modern untuk menghilangkan beban klausa WHERE, jadi hilangkan kebingungan di sana:

SELECT o.id
FROM programs o
JOIN titles_programs t ON t.object_id=o.id
JOIN descriptions_programs d ON d.object_id=o.id
WHERE MATCH (d.text) AGAINST ('+china' IN BOOLEAN MODE) AND d.current=1
OR MATCH (t.text) AGAINST ('+china' IN BOOLEAN MODE) AND t.current=1

Ini akan menghentikan penggabungan silang yang tidak disengaja yang menyebabkan ledakan kombinatorial; Saya mengharapkannya untuk beroperasi dalam waktu yang wajar kecuali databasenya sangat besar.

Jika tidak, dapatkah Anda memposting hasil EXPLAIN SELECT di atas? Agaknya satu atau kedua indeks teks lengkap tidak digunakan. Saya pasti bisa membayangkan pengoptimal kueri gagal menggunakan indeks teks lengkap kedua, dengan melakukan sesuatu seperti mencoba 'mengisi' baris yang tidak cocok dengan kueri teks lengkap pertama alih-alih langsung ke indeks, atau semacamnya.

Biasanya ketika Anda ingin mengindeks teks lengkap atas dua kolom dalam kombinasi, Anda membuat satu indeks di kedua kolom. Ini akan menjadi jauh lebih cepat. Namun itu berarti Anda harus meletakkan judul dan deskripsi dalam tabel yang sama. Ini mungkin tidak terlalu sulit:karena teks lengkap hanya berfungsi pada tabel MyISAM (dan Anda biasanya tidak menginginkan data kanonik Anda dalam tabel MyISAM), Anda dapat menyimpan salinan definitif data Anda dalam tabel InnoDB yang dinormalisasi dengan benar, dengan tabel MyISAM tambahan hanya berisi umpan pencarian yang dilucuti dan ditangkai.

Jika tidak ada yang bagus... yah, saya rasa saya akan kembali ke UNIONing yang Anda sebutkan, ditambah dengan filter tingkat aplikasi untuk menghapus ID duplikat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. database mysql travis membuat kesalahan pengguna

  2. Bagaimana cara menyimpan detail oauth Twitter di database mysql?

  3. MySqlConnection.StateChange tidak pernah Mengambil

  4. MySQL - pilih peringkat untuk pengguna di tabel skor

  5. permintaan mysql untuk daftar tertaut