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

Pengindeksan untuk pagination keyset di mysql

Saya pernah mengalami masalah ini sebelumnya. Ini analisa saya.

  • Itu terjadi di MySQL 5.7 dan 8.0, tetapi tampaknya tidak di versi yang lebih lama dan tidak di MariaDB.

  • "Solusi" yang saya sukai adalah mengubah indeks sebagai berikut:

       INDEX(company_id)      -- DROP this
       INDEX(company_id, id)  -- ADD this
    

Meskipun indeks 2 kolom secara teoritis identik dengan indeks satu kolom untuk InnoDB (dengan asumsi id adalah PK`), Pengoptimal tampaknya mengabaikan fakta ini dalam beberapa situasi .

Juga, saya ingin secara eksplisit menambahkan PK ketika saya melihat kebutuhan . Ini menandakan pembaca skema di masa mendatang (termasuk saya sendiri) bahwa beberapa kueri mendapat manfaat dari PK yang ditambahkan.

Saya belum menemukan kasus di mana "penggabungan indeks berpotongan" lebih cepat daripada indeks komposit yang setara.

Saya tidak suka menggunakan "petunjuk" indeks karena takut distribusi data akan berubah di masa mendatang dan "petunjuk" saya akan memperburuk keadaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah MySQL Short Circuit fungsi IF()?

  2. Mysql:Cara mendapatkan setiap baris yang memiliki lebih dari jumlah desimal tertentu setelah titik

  3. MySQL tidak memulai saat memutakhirkan OSX ke Yosemite atau El Capitan

  4. Memperbarui skema tabel tanpa memengaruhi data di Laravel

  5. Permintaan untuk memesan dengan tiga karakter terakhir dari kolom