Yanıtlar:
İki sözdizimi formu biraz kafa karıştırıcıdır, çünkü sayıları tersine çevirirler:
LIMIT <skip>, <count>
Şuna eşittir:
LIMIT <count> OFFSET <skip>
MySQL ve PostgreSQL sözdizimi ile uyumludur. MySQL her iki sözdizimi formunu da destekler ve dokümanlar OFFSET ile ikinci sözdiziminin PostgreSQL ile uyumluluk sağladığını iddia eder. PostgreSQL dokümanları sadece ikinci sözdizimini desteklediğini gösterir ve SQLite dokümanları her ikisini de desteklediğini gösterir ve karışıklığı önlemek için ikinci sözdizimini önerir.
Bu arada, önce ORDER BY'ı kullanmadan LIMIT kullanmak her zaman istediğiniz sonuçları vermeyebilir. Pratikte, SQLite satırları muhtemelen dosyada fiziksel olarak nasıl depolandıklarına göre belirlenen bir sıraya göre döndürür. Ancak bu mutlaka istediğiniz sırada olduğu anlamına gelmez. Öngörülebilir bir sipariş almanın tek yolu, ORDER BY'ı açıkça kullanmaktır.
LIMIT <count> OFFSET <skip>
daha açıktır. Teşekkür ederim.
İkincisi, bir uyarı ile alternatif bir sözdizimidir :
OFFSET anahtar sözcüğü yerine virgül kullanılırsa, uzaklık ilk sayı ve sınır ikinci sayıdır. Bu görünen çelişki kasıtlıdır - eski SQL veritabanı sistemleriyle uyumluluğu en üst düzeye çıkarır.
Bazı testler yaptım ve performansta bir fark yok.
Bu sadece diğer sql dilleriyle uyumluluk içindir.
Her iki versiyonun da çalışma süresi aynıdır.
1001 satırlı table1 ile sqlite db yaptım. Sonraki testi çalıştırıyorum
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) + "");
}
Zaman saniyede 0,001 oranında değişir