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

MySQL apakah indeks saya bagus?

Tulis kueri dengan cara ini:

SELECT *
    FROM orders
    JOIN users  ON orders.id_user = users.id
    WHERE orders.status='new'

Jangan tentukan indeks apa yang akan digunakan.

Dimulai dengan WHERE klausa, sepertinya ini mungkin berguna:INDEX(status) . Namun karena "status" terdengar seperti "bendera" dengan kardinalitas rendah, pengoptimal mungkin memutuskan untuk mengabaikan indeks dan hanya melakukan pemindaian tabel. Tidak apa-apa. Tidak apa-apa karena lebih cepat melakukan pemindaian tabel daripada memantul antara indeks dan data, ketika indeks tidak terlalu selektif. Bagaimanapun, serahkan keputusan pada Pengoptimal.

Sekarang berurusan dengan orders , perlu JOIN kepada users . Satu-satunya cara untuk melakukannya adalah dengan memiliki indeks di id . Nama itu ("id") menyiratkan bahwa itu mungkin PRIMARY KEY , Apakah itu? (Harap berikan SHOW CREATE TABLE .)

Buku masak indeks

Kueri lain yang Anda sebutkan harus ditulis

SELECT * FROM users WHERE id=33

Dan, seperti yang telah dibahas, indeks (PRIMARY KEY ?) pada id adalah hal yang benar.

Tidak ada keuntungan (untuk SELECTs yang diberikan , setidaknya) untuk INDEX(status, id_user) . Pilihan Anda mencakup semua kolom (* ); itu hanya mengambil id_user , maka indeks semacam itu akan "menutupi", dan memiliki beberapa keuntungan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berapa lama waktu yang dibutuhkan untuk membangun indeks menggunakan ALTER TABLE di MySQL?

  2. Alias ​​​​untuk klausa GROUP BY?

  3. Mysql Exists vs IN -- subquery vs subquery berkorelasi?

  4. Python Matplotlib dan MySQL dan Ginput

  5. kesalahan sintaks, 'mysql_connect' yang tidak terduga (T_STRING)