"Limit 1000,25" ve "limit 25 Ofset 1000"


11

Son zamanlarda MySQL'in bir offsetözelliği olduğunu öğrendim . Ofset sonuçları veya ofset ve limit değişkeni arasındaki fark hakkında belgeler bulmaya çalışıyordum, ancak aradığım şeyi bulamıyorum.

Diyelim ki bir tabloda 10.000 satır var ve 1.000 numaralı satırdan 25 sonuç istiyorum. Bildiğim kadarıyla, aynı sonucu elde etmek için her ikisini de yapabilirim:

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000

Bilmek istediğim, ikisi arasındaki fark.

  • Bu gerçekten aynısını yapıyor mu yoksa anlayışım yanlış mı?
  • Daha büyük tablolarda biri daha yavaş / daha hızlı
  • Benim yaptığımda ofsetin sonucu değişiyor mu WHERE column=1(diyelim ki sütun> 100 farklı değere sahip)
  • Yaptığımda ofsetin sonucu değişiyor mu ORDER BY column ASC(rastgele değerlere sahip olduğu varsayıldığında)

Bu 'aptalca' bir soruysa ve birisi konuyu aydınlatan herhangi bir belge biliyorsa, lütfen cevaplara ekleyin.
Ben duygu ofset sıralama ve nerede göz ardı veritabanında bulunan ilk X satır atlar var.


MySQL belgeleri bunu mükemmel bir şekilde açıklar. Kendinize bakmak istememenizin bir nedeni var mı?
siride

1
"PostgreSQL ile uyumluluk için MySQL, LIMIT row_count OFFSET ofset sözdizimini de destekler." ( dev.mysql.com/doc/refman/5.5/en/select.html adresinden ).
siride

Çünkü bu hala sorularıma cevap vermiyor. Alıntıdan (ve sayfadaki metinden), ofsetin sınırla aynı şey olduğu sonucuna varmalıyım, LIMIT kısayol seçici gibi?
Martijn

1
aynı şeyi ifade etmek için farklı bir sözdizimi. Diğer alt sorularınız, yayınınızın başlığından ve ilk bölümünden tamamen farklıdır.
siride

1
Aynı şey olursa, diğer sorguların her iki durumda da farklı şekilde etkilenmeyeceğini anlıyorum. Aynı şey olduğuna ikna olmadım, aradığım cevap buydu, teşekkürler.
Martijn

Yanıtlar:


9

Operasyon açısından

SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000

ifadelerde kesinlikle bir fark yok

@ siride'nin yorumu tam olarak önemli.

LIMIT 1000,25 anlamına geliyor LIMIT 25 OFFSET 1000

Aynı Belgelerden

LIMIT row_count eşittir LIMIT 0, row_count

GERÇEK SORULARINIZ

  • Bu gerçekten aynısını yapıyor mu yoksa anlayışım yanlış mı?
  • Daha büyük tablolarda biri daha yavaş / daha hızlı

Her iki sorgu da aynı olduğundan, hiçbir fark yoktur

  • WHERE sütunu = 1 yaptığımda ofsetin sonucu değişiyor mu (sütunda> 100 farklı değer var)
  • ORDER BY sütunu ASC yaptığımda ofsetin sonucu değişiyor mu (rastgele değerleri olduğu varsayılarak)

Kullanmak LIMITsonuç kümelerini değiştirmez. Sadece sonuç kümesi içinde gezinirler.

Bu sorgu

SELECT id,name,description FROM tablename ORDER BY id LIMIT 1000,25

farklı olurdu

SELECT * FROM (SELECT id,name,description FROM tablename LIMIT 1000,25) A ORDER BY id;

çünkü LIMIT farklı bir aşamada uygulanıyor.

Tablename 1000 satırdan daha azsa ilk sorgu hiçbir şey döndürmez

Alt sorguda daha az 1000 satır varsa ikinci sorgu hiçbir şey döndürmez

SONUÇ

Verileri doğru aşamada sıraladığınızdan emin olmak için sorguyu biçimlendirmeniz gerekir


1
Teşekkür ederim. Bu: "İfadelerde kesinlikle hiçbir fark yok" tam olarak aradığım şeydi ve bu bilgilerle o sıralamayı veya nerede önemli olmadığını görebiliyorum. Aynı şey olup olmadığından emin değildim ve şeytanın kodlamasında ayrıntılarda olduğunu kesin olarak bilmek istiyorum :)
Martijn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.