Silakan tandai sebagai jawaban jika telah menghapus keraguan Anda seperti yang Anda sebutkan di komentar.
Mubashar
Jawaban:
270
Dua bentuk sintaksis sedikit membingungkan karena mereka membalikkan angka:
LIMIT <skip>,<count>
Setara dengan:
LIMIT <count> OFFSET <skip>
Ini kompatibel dengan sintaksis dari MySQL dan PostgreSQL. MySQL mendukung kedua bentuk sintaks, dan dokumennya mengklaim bahwa sintaks kedua dengan OFFSET dimaksudkan untuk memberikan kompatibilitas dengan PostgreSQL. Dokumen PostgreSQL hanya menunjukkan sintaksis kedua, dan dokumen SQLite menunjukkan bahwa keduanya mendukung keduanya, merekomendasikan sintaksis kedua untuk menghindari kebingungan.
Omong-omong, menggunakan LIMIT tanpa terlebih dahulu menggunakan ORDER BY mungkin tidak selalu memberi Anda hasil yang Anda inginkan. Dalam praktiknya, SQLite akan mengembalikan baris dalam urutan tertentu, mungkin ditentukan oleh cara mereka secara fisik disimpan dalam file. Tetapi ini tidak berarti bahwa itu sesuai dengan urutan yang Anda inginkan. Satu-satunya cara untuk mendapatkan pesanan yang dapat diprediksi adalah dengan menggunakan ORDER BY secara eksplisit.
Yang terakhir adalah sintaks alternatif dengan satu peringatan :
Jika koma digunakan sebagai pengganti kata kunci OFFSET, maka offset adalah angka pertama dan batasnya adalah angka kedua. Kontradisi ini tampaknya disengaja - memaksimalkan kompatibilitas dengan sistem database SQL lama.
Saya melakukan beberapa tes dan tidak ada perbedaan kinerja.
Itu hanya untuk kompatibilitas dengan bahasa sql lainnya.
Waktu menjalankan kedua versi adalah sama.
Saya membuat sqlite db dengan table1 dengan 100000 baris. Saya menjalankan tes berikutnya
long timeLimitOffset =0;
long timeLimitComma =0;for(int i =0; i <100000; i++){//first version
timeLimitOffset += SqlDuraction("Select * from table1 order by col1 LIMIT "+(i +1)+" OFFSET "+(1001- i)+"");// second version
timeLimitComma += SqlDuraction("Select * from table1 order by col1 LIMIT "+(1001- i)+" , "+(i +1)+"");}
Jawaban:
Dua bentuk sintaksis sedikit membingungkan karena mereka membalikkan angka:
Setara dengan:
Ini kompatibel dengan sintaksis dari MySQL dan PostgreSQL. MySQL mendukung kedua bentuk sintaks, dan dokumennya mengklaim bahwa sintaks kedua dengan OFFSET dimaksudkan untuk memberikan kompatibilitas dengan PostgreSQL. Dokumen PostgreSQL hanya menunjukkan sintaksis kedua, dan dokumen SQLite menunjukkan bahwa keduanya mendukung keduanya, merekomendasikan sintaksis kedua untuk menghindari kebingungan.
Omong-omong, menggunakan LIMIT tanpa terlebih dahulu menggunakan ORDER BY mungkin tidak selalu memberi Anda hasil yang Anda inginkan. Dalam praktiknya, SQLite akan mengembalikan baris dalam urutan tertentu, mungkin ditentukan oleh cara mereka secara fisik disimpan dalam file. Tetapi ini tidak berarti bahwa itu sesuai dengan urutan yang Anda inginkan. Satu-satunya cara untuk mendapatkan pesanan yang dapat diprediksi adalah dengan menggunakan ORDER BY secara eksplisit.
sumber
LIMIT <count> OFFSET <skip>
lebih jelas. Terima kasih.Yang terakhir adalah sintaks alternatif dengan satu peringatan :
sumber
Saya melakukan beberapa tes dan tidak ada perbedaan kinerja.
Itu hanya untuk kompatibilitas dengan bahasa sql lainnya.
Waktu menjalankan kedua versi adalah sama.
Saya membuat sqlite db dengan table1 dengan 100000 baris. Saya menjalankan tes berikutnya
Waktu bervariasi untuk 0,001 detik
sumber