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

Menggunakan OR pada pernyataan WHERE di MySql menyebabkan eksekusi lambat

Ya, OR sering merupakan pembunuh kinerja. Solusi umum adalah melakukan UNION . Untuk contoh Anda:

SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (teams_users.status='1')
UNION DISTINCT
SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (posts.user_id='7135');

Jika Anda yakin tidak ada dups, ubah ke UNION ALL yang lebih cepat .

Jika Anda tidak mencari team_users missing yang hilang baris, gunakan JOIN alih-alih LEFT JOIN .

Jika Anda membutuhkan ORDER BY , tambahkan beberapa induk:

( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...

Jika tidak, ORDER BY hanya akan berlaku untuk SELECT . kedua . (Jika Anda juga membutuhkan 'pagination', lihat blog saya .)

Harap perhatikan bahwa Anda mungkin juga memerlukan LIMIT dalam keadaan tertentu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO PHP masukkan ke DB dari array asosiatif

  2. Ekspor MySQL UTF8 Windows - impor Linux

  3. Apakah fungsi matematika di MySQL lebih cepat dari PHP?

  4. MySQL - berapa lama membuat indeks?

  5. MySQL &NHibernate. Bagaimana cara memperbaiki kesalahan:Kolom 'ReservedWord' bukan milik tabel ReservedWords?