Metode Seek untuk Meningkatkan Performa Data Listing

Untuk meningkatkan performa data listing, bisa menggunakan metode seek. Secara singkat metode seek adalah menemukan nilai unik dalam setiap baris data, kemudian gunakan nilai unik tadi ke clause WHERE untuk mengetahui posisi baris data. Jadi tidak menggunakan OFFSET dalam query.

Seek Method is a method to replace offset with a where predicate and matching order-by Consistent performance is achieved regardless of the page number, this is because the where predicate can use the database indexes. Must include a unique ID in the predicate or you may skip rows during pagination.

Contoh:

Kita asumsikan dalam baris terakhir data yang ditampilkan memiliki nilai id 111997.

Data Terakhir pada Data Table

Maka query untuk melihat data di halaman berikutnya adalah

SELECT *
FROM
    invoices
WHERE
    id > 111997
ORDER BY id DESC
LIMIT 10;

Begitu juga untuk melihat data sebelumnya maka nilai unik yang digunakan adalah id dari data pertama dalam list, misalnya data pertama adalah 11190:

Data Pertama pada Table

Maka query untuk melihat data sebelumnya adalah:

SELECT *
FROM
    invoices
WHERE
    id < 111990
ORDER BY id DESC
LIMIT 10;

Metode ini hanya bisa digunakan pada nilai yang unik dan fitur order pada list juga menggunakan nilai unik. Jika dibandingkan antara metode OFFSET dan metode Seek maka perbandinga performa yang diberikan sebagai berikut:

Perbandingan Performa Metode OFFSET vs Metode Seek

Kekurangan menggunakan Seek Method adalah tidak bisa melakukan jump ke page tertentu secara langsung, yang bisa dilakukan terhadap pagination hanya next dan previous.

Jika kamu membuat aplikasi dengan fitur infinite scroll seperti pada aplikasi shopee:

Infinite Scroll pada Shopee

Maka metode Seek adalah pendekatan yang paling cocok untuk membuat data listing dengan performa yang baik.

If you have any questions, don't hesitate to chat me personally via LinkedIn or comment below.

Thank you
Have a great day ^ _ ^

References:

  • https://blog.jooq.org/faster-sql-paging-with-jooq-using-the-seek-method/
  • https://use-the-index-luke.com/sql/partial-results/fetch-next-page