Π—Π°Ρ‰ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ инструмСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° страниранС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅?

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ всички! Аз съм Π±Π΅ΠΊΠ΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ пиша микроуслуги Π² Java + Spring. Работя Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ Π΅ΠΊΠΈΠΏΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π² Tinkoff.

Π—Π°Ρ‰ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ инструмСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° страниранС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅?

Π’ нашия Π΅ΠΊΠΈΠΏ чСсто възниква Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° заявкитС Π² Π‘Π£Π‘Π”. Π’ΠΈΠ½Π°Π³ΠΈ искатС Π΄Π° стС ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ, Π½ΠΎ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС справитС със замислСно конструирани индСкси - трябва Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ‚Π΅ някои Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ скитания ΠΈΠ· ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΎΡ‚ΠΊΡ€ΠΈΡ… Π‘Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΎ полСзният Π±Π»ΠΎΠ³ Π½Π° Marcus Wynand, Π°Π²Ρ‚ΠΎΡ€ Π½Π° SQL Performance Explained. Π’ΠΎΠ²Π° Π΅ ΠΎΠ½Π·ΠΈ Ρ€ΡΠ΄ΡŠΠΊ Ρ‚ΠΈΠΏ Π±Π»ΠΎΠ³, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ всички статии ΠΏΠΎΠ΄Ρ€Π΅Π΄.

Π‘ΠΈΡ… искал Π΄Π° ΠΏΡ€Π΅Π²Π΅Π΄Π° ΠΊΡ€Π°Ρ‚ΠΊΠ° статия ΠΎΡ‚ ΠœΠ°Ρ€ΠΊΡŠΡ Π·Π° вас. МоТС Π΄Π° сС Π½Π°Ρ€Π΅Ρ‡Π΅ Π΄ΠΎ извСстна стСпСн манифСст, ΠΊΠΎΠΉΡ‚ΠΎ сС стрСми Π΄Π° ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ към стария, Π½ΠΎ всС ΠΎΡ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° опСрацията Π·Π° отмСстванС спорСд стандарта SQL.

На мСста Ρ‰Π΅ допълвам Π°Π²Ρ‚ΠΎΡ€Π° с пояснСния ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ. Π©Π΅ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌ всички Ρ‚Π°ΠΊΠΈΠ²Π° мСста ΠΊΠ°Ρ‚ΠΎ β€žΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎβ€œ. Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ яснота

Малко въвСдСниС

Мисля, Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€Π° знаят ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° ΠΈ Π±Π°Π²Π½Π° Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° със сСлСкции Π½Π° страници Ρ‡Ρ€Π΅Π· отмСстванС. Π—Π½Π°Π΅Ρ‚Π΅ Π»ΠΈ, Ρ‡Π΅ Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ доста лСсно Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ с ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π΄ΠΈΠ·Π°ΠΉΠ½?

И Ρ‚Π°ΠΊΠ°, ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° offset ΠΊΠ°Π·Π²Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΄Π° пропуснС ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ n записа Π² заявката. Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΎΠ±Π°Ρ‡Π΅ всС ΠΎΡ‰Π΅ трябва Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΏΡŠΡ€Π²ΠΈ n записа ΠΎΡ‚ диска Π² дадСния Ρ€Π΅Π΄ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Ρ‚Π΅ сортиранС, Π°ΠΊΠΎ Π΅ посочСно) ΠΈ Π΅Π΄Π²Π° Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ бъдС възмоТно Π΄Π° Π²ΡŠΡ€Π½Π΅ записи ΠΎΡ‚ n+1 Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ. Най-интСрСсното Π΅, Ρ‡Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π½Π΅ Π΅ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° имплСмСнтация Π² Π‘Π£Π‘Π”, Π° Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° дСфиниция спорСд стандарта:

…рСдовСтС ΠΏΡŠΡ€Π²ΠΎ сС сортират спорСд ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° броя Ρ€Π΅Π΄ΠΎΠ²Π΅, посочСни Π² ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ...
-SQL:2016, част 2, 4.15.3 ИзвСдСни Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°ΠΉ-използваният стандарт)

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚ΡƒΠΊ Π΅, Ρ‡Π΅ отмСстванСто ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π΅Π΄ΠΈΠ½-СдинствСн ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ - броя Π½Π° записитС Π·Π° пропусканС ΠΈ Ρ‚ΠΎΠ²Π° Π΅ всичко. Π‘Π»Π΅Π΄Π²Π°ΠΉΠΊΠΈ Ρ‚Π°Π·ΠΈ дСфиниция, Π‘Π£Π‘Π” ΠΌΠΎΠΆΠ΅ само Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ всички записи ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΠΈ Π½Π΅Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Ρ‚ΠΎΠ²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π° компСнсиранС Π½ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° Π΄Π° Π²ΡŠΡ€ΡˆΠΈΠΌ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. И Π΄ΠΎΡ€ΠΈ няма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π»ΠΈ Π΅ SQL ΠΈΠ»ΠΈ NoSQL.

Π‘Π°ΠΌΠΎ ΠΎΡ‰Π΅ ΠΌΠ°Π»ΠΊΠΎ Π±ΠΎΠ»ΠΊΠ°

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с офсСта Π½Π΅ ΡΠ²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Π΄ΠΎΡ‚ΡƒΠΊ ΠΈ Π΅Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ. Ако ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π²Π΅ страници с Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ диска Π΄Ρ€ΡƒΠ³Π° опСрация вмъкнС Π½ΠΎΠ² запис, ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ сС случи Π² Ρ‚ΠΎΠ·ΠΈ случай?

Π—Π°Ρ‰ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ инструмСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° страниранС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅?

ΠšΠΎΠ³Π°Ρ‚ΠΎ отмСстванСто сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° пропусканС Π½Π° записи ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ страници, Π² ситуация Π½Π° добавянС Π½Π° Π½ΠΎΠ² запис ΠΌΠ΅ΠΆΠ΄Ρƒ чСтСния Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ страници, Π½Π°ΠΉ-вСроятно Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΈ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Ρ‚ΠΎΠ²Π° Π΅ възмоТно, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅ΠΌ страница ΠΏΠΎ страница, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°Ρ‚Π° ΠΏΠΎ конструкция, Ρ‚ΠΎΠ³Π°Π²Π° Π² срСдата Π½Π° нашия ΠΈΠ·Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π½ΠΎΠ² запис).

Π€ΠΈΠ³ΡƒΡ€Π°Ρ‚Π° ясно изобразява Ρ‚Π°Π·ΠΈ ситуация. Π‘Π°Π·Π°Ρ‚Π° Ρ‡Π΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ 10 записа, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ сС вмъква Π½ΠΎΠ² запис, ΠΊΠΎΠΉΡ‚ΠΎ компСнсира всички ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ записи с 1. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π±Π°Π·Π°Ρ‚Π° Π²Π·Π΅ΠΌΠ° Π½ΠΎΠ²Π° страница ΠΎΡ‚ слСдващитС 10 записа ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° Π½Π΅ ΠΎΡ‚ 11-ия, ΠΊΠ°ΠΊΡ‚ΠΎ трябва, Π° ΠΎΡ‚ 10-Ρ‚ΠΈ, Π΄ΡƒΠ±Π»ΠΈΡ€Π° Ρ‚ΠΎΠ·ΠΈ запис. Има ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΈΠ·Ρ€Π°Π·, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-чСсто срСщаното.

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‚ΠΎΠ²Π° Π½Π΅ са ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° Π‘Π£Π‘Π” ΠΈΠ»ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ Π² Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° страниранС спорСд стандарта SQL. КазвамС Π½Π° Π‘Π£Π‘Π” коя страница Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ записа Π΄Π° пропуснС. Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ просто Π½Π΅ Π΅ Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° Ρ‚Π°ΠΊΠ°Π²Π° заявка, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ° Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΌΠ°Π»ΠΊΠΎ информация Π·Π° Ρ‚ΠΎΠ²Π°.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° си струва Π΄Π° сС изясни, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ°, Π° ΠΏΠΎ-скоро със сСмантиката Π½Π° заявката. Има ΠΎΡ‰Π΅ няколко синтаксиса, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ ΠΏΠΎ своя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅Π½ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€:

  • ΠšΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° offset Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ бСшС спомСнато ΠΏΠΎ-Ρ€Π°Π½ΠΎ.
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΎΡ‚ Π΄Π²Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ limit [offset] (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ limit сам ΠΏΠΎ сСбС си Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° лош).
  • Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ Π΄ΠΎΠ»Π½ΠΈ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ въз основа Π½Π° Π½ΠΎΠΌΠ΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ row_number(), rownum ΠΈ Ρ‚.Π½.).

Всички Ρ‚Π΅Π·ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ просто Π²ΠΈ ΠΊΠ°Π·Π²Π°Ρ‚ ΠΊΠΎΠ»ΠΊΠΎ Ρ€Π΅Π΄Π° Π΄Π° пропуснСтС, Π±Π΅Π· Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация ΠΈΠ»ΠΈ контСкст.

По-късно Π² Ρ‚Π°Π·ΠΈ статия ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° offset сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° всички Ρ‚Π΅Π·ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

Π–ΠΈΠ²ΠΎΡ‚ Π±Π΅Π· ΠžΠ€Π‘Π•Π’

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° си прСдставим какъв Π±ΠΈ Π±ΠΈΠ» Π½Π°ΡˆΠΈΡΡ‚ свят Π±Π΅Π· всички Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Оказва сС, Ρ‡Π΅ ΠΆΠΈΠ²ΠΎΡ‚ΡŠΡ‚ Π±Π΅Π· отмСстванС Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ‚Ρ€ΡƒΠ΄Π΅Π½: с select ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ само ΠΎΠ½Π΅Π·ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ смС Π²ΠΈΠ΄Π΅Π»ΠΈ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π±ΠΈΠ»ΠΈ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° страница), ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ условиС Π² where.

Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΈΠ·Ρ…ΠΎΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ сСлСктиранСто сС изпълнява Π²ΡŠΡ€Ρ…Ρƒ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ Π½Π°Π±ΠΎΡ€ (добрият стар Ρ€Π΅Π΄ ΠΏΠΎ). Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ Π½Π°Π±ΠΎΡ€, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ доста прост Ρ„ΠΈΠ»Ρ‚ΡŠΡ€, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ само Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π·Π°Π΄ послСдния запис Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° страница:

    SELECT ...
    FROM ...
    WHERE ...
    AND id < ?last_seen_id
    ORDER BY id DESC
    FETCH FIRST 10 ROWS ONLY

Π’ΠΎΠ²Π° Π΅ цСлият ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅Ρ‰Π°Ρ‚Π° стават ΠΏΠΎ-Π·Π°Π±Π°Π²Π½ΠΈ ΠΏΡ€ΠΈ сортиранС ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, Π½ΠΎ идСята остава ΡΡŠΡ‰Π°Ρ‚Π°. Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ NoSQL- Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сС Π½Π°Ρ€ΠΈΡ‡Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΈΠ»ΠΈ ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. Π’ΠΎΠΉ Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с плаващия Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ситуацията с писанС ΠΌΠ΅ΠΆΠ΄Ρƒ чСтСния Π½Π° страници, описана ΠΏΠΎ-Ρ€Π°Π½ΠΎ) ΠΈ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ всички ΠΎΠ±ΠΈΡ‡Π°ΠΌΠ΅, Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΈ ΠΏΠΎ-стабилно ΠΎΡ‚ класичСския офсСт. Бтабилността сС ΠΊΡ€ΠΈΠ΅ във Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° заявката Π½Π΅ сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ Π½Π° броя Π½Π° заявСната Ρ‚Π°Π±Π»ΠΈΡ†Π° (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π°ΠΊΠΎ искатС Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ Π·Π° страниранС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ прСзСнтацията Π½Π° Π°Π²Ρ‚ΠΎΡ€Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ сравнитСлни ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Ρ‚Π°ΠΌ).

Π•Π΄ΠΈΠ½ ΠΎΡ‚ слайдовСтС Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° Ρ‚ΠΎΠ²Π°Ρ‡Π΅ страниранСто ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ Π΅ Π²ΡΠ΅ΠΌΠΎΠ³ΡŠΡ‰ΠΎ - ΠΈΠΌΠ° своитС ограничСния. Най-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ тя няма способността Π΄Π° Ρ‡Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ страници (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: нСпослСдоватСлно). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π² Π΅Ρ€Π°Ρ‚Π° Π½Π° Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚Π°Π½Π΅ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π² прСдния ΠΊΡ€Π°ΠΉ), Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠŸΠΎΡΠΎΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ Π½Π° страница Π·Π° ΠΊΠ»ΠΈΠΊΠ²Π°Π½Π΅ Π΅ лошо Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° потрСбитСлския интСрфСйс Ρ‚Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΌΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° статията).

Какво Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π·Π° инструмСнтитС?

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ чСсто Π½Π΅ Π΅ подходящо ΠΏΠΎΡ€Π°Π΄ΠΈ липсата Π½Π° инструмСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ инструмСнти Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π°ΠΌΠΊΠΈ, Π½Π΅ Π²ΠΈ позволяват Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ пагинацията.

Битуацията сС утСТнява ΠΎΡ‚ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ описаният ΠΌΠ΅Ρ‚ΠΎΠ΄ изисква ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΎΡ‚ ΠΊΡ€Π°ΠΉ Π΄ΠΎ ΠΊΡ€Π°ΠΉ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ - ΠΎΡ‚ Π‘Π£Π‘Π” Π΄ΠΎ изпълнСниС Π½Π° AJAX заявка Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° с Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΎ ΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚Π°Π½Π΅. ВмСсто Π΄Π° посочитС само Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° страницата, сСга трябва Π΄Π° посочитС Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° всички страници навСднъТ.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, броят Π½Π° Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ пагинация Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, постСпСнно нараства. Π•Ρ‚ΠΎ с ΠΊΠ°ΠΊΠ²ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

(Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: някои Π²Ρ€ΡŠΠ·ΠΊΠΈ бяха ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π²ΠΎΠ΄Π° някои Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ са Π±ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ 2017-2018 Π³. Ако сС интСрСсуватС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ оригиналния ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ.)

Π’ΠΎΡ‡Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΠΎΠΌΠΎΡ‰. Ако Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ Ρ€Π°ΠΌΠΊΠ°, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ пагинация, Ρ‚ΠΎΠ³Π°Π²Π° моля, ΠΏΡ€ΠΈΠ·ΠΎΠ²Π°Π²Π°ΠΌ Π²ΠΈ, умолявам Π²ΠΈ Π΄Π° прСдоставитС СстСствСна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° страниранС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΈΠ»ΠΈ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ‰, Ρ‰Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π° (Ρ„ΠΎΡ€ΡƒΠΌΠ°, Twitter, Ρ„ΠΎΡ€ΠΌΠ° Π·Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈ) (Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΎΡ‚ моя ΠΎΠΏΠΈΡ‚ с ΠœΠ°Ρ€ΠΊΡŠΡ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Ρ‚ΠΎΠΉ Π΅ наистина Снтусиазиран Π΄Π° разпространява Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°).

Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ смятатС, Ρ‡Π΅ заслуТават Π΄Π° ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° страниранС ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ заявка ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π°ΠΊΠΎ Π΅ възмоТно. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠ° към Ρ‚Π°Π·ΠΈ статия.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π°, ΠΏΠΎΡ€Π°Π΄ΠΈ която Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎ страниранСто ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π½Π΅ Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ разпространСн, Π½Π΅ Π΅, Ρ‡Π΅ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π·Π° изпълнСниС тСхничСски ΠΈΠ»ΠΈ изисква Π³ΠΎΠ»Π΅ΠΌΠΈ усилия. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΅, Ρ‡Π΅ ΠΌΠ½ΠΎΠ·ΠΈΠ½Π° са свикнали Π΄Π° Π²ΠΈΠΆΠ΄Π°Ρ‚ ΠΈ работят с офсСт - Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сС Π΄ΠΈΠΊΡ‚ΡƒΠ²Π° ΠΎΡ‚ самия стандарт.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ Ρ…ΠΎΡ€Π° мислят Π·Π° промяна Π½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° към пагинацията ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° инструмСнталната ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΎΡ‚ Ρ€Π°ΠΌΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сС Ρ€Π°Π·Π²ΠΈΠ²Π° слабо. Π•Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ, Π°ΠΊΠΎ идСята ΠΈ Ρ†Π΅Π»Ρ‚Π° Π·Π° бСзофсСтно страниранС Π²ΠΈ Π΅ Π±Π»ΠΈΠ·ΠΊΠ°, ΠΏΠΎΠΌΠΎΠ³Π½Π΅Ρ‚Π΅ Π·Π° разпространСниСто ΠΉ!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: https://use-the-index-luke.com/no-offset
Автор: ΠœΠ°Ρ€ΠΊΡƒΡ Π£ΠΈΠ½Π°Π½Π΄

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€