НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ OFFSET ΠΈ LIMIT Π² ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки

ΠžΡ‚ΠΌΠΈΠ½Π°Ρ…Π° Π΄Π½ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС притСсняватС Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° производитСлността Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π΅ стои Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎ. ВсСки Π½ΠΎΠ² Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‡ иска Π΄Π° създадС слСдващия Facebook, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ всички Π΄Π°Π½Π½ΠΈ, Π΄ΠΎ ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠΊΠΎΠΏΠ°. Π‘ΠΈΠ·Π½Π΅ΡΡŠΡ‚ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° ΠΎΠ±ΡƒΡ‡Π°Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π΄Π° правят ΠΏΠ°Ρ€ΠΈ. Π’ Ρ‚Π°ΠΊΠΈΠ²Π° условия програмиститС трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ API, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌ позволяват Π±ΡŠΡ€Π·ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ Π΄Π° работят с ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈ количСства информация.

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ OFFSET ΠΈ LIMIT Π² ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки

Ако стС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π»ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, вСроятно стС писали ΠΊΠΎΠ΄ Π·Π° изпълнСниС Π½Π° ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки. НапримСр Ρ‚Π°ΠΊΠ°:

SELECT * FROM table_name LIMIT 10 OFFSET 40

ΠΠ°Ρ‡ΠΈΠ½ΡŠΡ‚, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Π΅?

Но Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π΅ Π½Π°Ρ‡ΠΈΠ½ΡŠΡ‚, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ стС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ пагинацията си, съТалявам Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Π½Π΅ стС Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎ Π½Π°ΠΉ-СфСктивния Π½Π°Ρ‡ΠΈΠ½.

Искаш Π»ΠΈ Π΄Π° ΠΌΠΈ Π²ΡŠΠ·Ρ€Π°Π·ΠΈΡˆ? ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π΅ Ρ…Π°Ρ€Ρ‡Π° Π²Ρ€Π΅ΠΌΠ΅. Застой, Shopify ΠΈ Миксмакс Π’Π΅ Π²Π΅Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈΡ‚Π΅, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ искам Π΄Π° говоря днСс.

ΠŸΠΎΡΠΎΡ‡Π΅Ρ‚Π΅ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π±Π΅ΠΊΠ΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π» OFFSET ΠΈ LIMIT Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° странирани заявки. Π’ MVP (Minimum Viable Product) ΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΌΠ°Π»ΠΊΠΈ количСства Π΄Π°Π½Π½ΠΈ, Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ доста ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ. Π’ΠΎΠ²Π° β€žΠΏΡ€ΠΎΡΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈβ€œ, Ρ‚Π°ΠΊΠ° Π΄Π° сС ΠΊΠ°ΠΆΠ΅.

Но Π°ΠΊΠΎ трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ систСми ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, трябва Π΄Π° сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π° СфСктивността Π½Π° заявкитС към Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² Ρ‚Π°ΠΊΠΈΠ²Π° систСми.

ДнСс Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ (ΠΌΠ½ΠΎΠ³ΠΎ лоши) ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ машини Π·Π° заявки ΠΈ ΠΊΠ°ΠΊ Π΄Π° постигнСм висока производитСлност ΠΏΡ€ΠΈ изпълнСниС Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° заявки.

Какво Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄ с OFFSET ΠΈ LIMIT?

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΊΠ°Π·Π°Ρ…ΠΌΠ΅, OFFSET ΠΈ LIMIT Π’Π΅ сС прСдставят Π΄ΠΎΠ±Ρ€Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ трябва Π΄Π° работят с Π³ΠΎΠ»Π΅ΠΌΠΈ количСства Π΄Π°Π½Π½ΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ възниква, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ нараснС Π΄ΠΎ Ρ‚Π°ΠΊΡŠΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ Π½Π΅ сС ΠΏΠΎΠ±ΠΈΡ€Π° Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с Ρ‚Π°Π·ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки.

Π—Π° Π΄Π° сС прояви Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, трябва Π΄Π° ΠΈΠΌΠ° ситуация, Π² която Π‘Π£Π‘Π” прибягва Π΄ΠΎ Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° опСрация Π·Π° пълно сканиранС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΡ€ΠΈ всяка ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½Π° заявка (Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° вмъкванС ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΈ Π½ΠΈΠ΅ Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ остарСли Π΄Π°Π½Π½ΠΈ!).

Какво Π΅ β€žΠΏΡŠΠ»Π½ΠΎ сканиранС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈβ€œ (ΠΈΠ»ΠΈ β€žΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ сканиранС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈβ€œ, Sequential Scan)? Π’ΠΎΠ²Π° Π΅ опСрация, ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° която Π‘Π£Π‘Π” послСдоватСлно Ρ‡Π΅Ρ‚Π΅ всСки Ρ€Π΅Π΄ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, Ρ‚.Π΅. Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ сС Π² нСя, ΠΈ Π³ΠΈ провСрява Π·Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π΄Π°Π΄Π΅Π½ΠΎ условиС. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ сканиранС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π΅ Π½Π°ΠΉ-бавният. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява, сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎ-ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ дисковата подсистСма Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°. Битуацията сС влошава ΠΎΡ‚ латСнтността, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π΄Π°Π½Π½ΠΈ, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π½Π° дисковС, ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ диск към ΠΏΠ°ΠΌΠ΅Ρ‚ Π΅ рСсурсоСмка опСрация.

НапримСр, ΠΈΠΌΠ°Ρ‚Π΅ записи Π·Π° 100000000 XNUMX XNUMX ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ заявка с конструкцията OFFSET 50000000. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π‘Π£Π‘Π” Ρ‰Π΅ трябва Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ всички Ρ‚Π΅Π·ΠΈ записи (Π° Π½ΠΈΠ΅ Π΄ΠΎΡ€ΠΈ Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ тях!), Π΄Π° Π³ΠΈ постави Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅, Π΄Π° Ρ€Π΅Ρ‡Π΅ΠΌ, 20 Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°, ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅Π½ΠΈ Π² LIMIT.

Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°: β€žΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΎΡ‚ 50000 50020 Π΄ΠΎ 100000 50000 ΠΎΡ‚ XNUMX XNUMXβ€œ. ВоСст систСмата ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ трябва Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ XNUMX XNUMX Ρ€Π΅Π΄Π°, Π·Π° Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ заявката. Π’ΠΈΠΆΠ΄Π°Ρ‚Π΅ Π»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ Π½Π΅Π½ΡƒΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π° Ρ‰Π΅ трябва Π΄Π° ΡΠ²ΡŠΡ€ΡˆΠΈ?

Ако Π½Π΅ ΠΌΠΈ вярватС, Π²ΠΈΠΆΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ… с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ db-fiddle.com

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ OFFSET ΠΈ LIMIT Π² ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π² db-fiddle.com

Π’Π°ΠΌ, вляво, Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Schema SQL, ΠΈΠΌΠ° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ вмъква 100000 XNUMX Ρ€Π΅Π΄Π° Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π° отдясно Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Query SQL, сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π΄Π²Π΅ заявки. ΠŸΡŠΡ€Π²ΠΈΡΡ‚, Π±Π°Π²Π΅Π½, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

А Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡ‰ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΅ Ρ‚Π°ΠΊΠ°:

SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;

Π—Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ заявки, просто Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½Π° Run Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° страницата. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, сравнявамС информацията Π·Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° заявката. Оказва сС, Ρ‡Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° заявка ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΏΠΎΠ½Π΅ 30 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡ‚ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° (Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π²Π°Ρ€ΠΈΡ€Π° ΠΎΡ‚ изпълнСниС Π΄ΠΎ изпълнСниС; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ систСмата ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π΅ ΠΎΡ‚Π½Π΅Π»ΠΎ 37 ms, Π·Π° Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ, Π½ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° сСкунда - 1 ms).

И Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π΄Π°Π½Π½ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° всичко Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΡ‰Π΅ ΠΏΠΎ-Π·Π»Π΅ (Π·Π° Π΄Π° сС ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ Π² Ρ‚ΠΎΠ²Π°, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ моя ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с 10 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π°).

Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ ΠΎΠ±ΡΡŠΠ΄ΠΈΡ…ΠΌΠ΅, трябва Π΄Π° Π²ΠΈ Π΄Π°Π΄Π΅ извСстна прСдстава Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ дСйствитСлно сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ заявкитС към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

Моля, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-висока Π΅ стойността OFFSET β€” Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅ Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявката.

Какво трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ вмСсто комбинацията ΠΎΡ‚ OFFSET ΠΈ LIMIT?

ВмСсто комбинация OFFSET ΠΈ LIMIT Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ структура, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎ слСдната схСма:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Π’ΠΎΠ²Π° Π΅ изпълнСниС Π½Π° заявка с пагинация, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° курсора.

ВмСсто Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ OFFSET ΠΈ LIMIT ΠΈ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ с всяка заявка, трябва Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ послСдния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡ (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ID) И LIMIT, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ заявки, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Π³ΠΎΡ€Π½ΠΈΡ‚Π΅.

Π—Π°Ρ‰ΠΎ? Π’ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π΅, Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ посочитС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° послСдния ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ Ρ€Π΅Π΄, Π²ΠΈΠ΅ ΠΊΠ°Π·Π²Π°Ρ‚Π΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π‘Π£Π‘Π” ΠΎΡ‚ΠΊΡŠΠ΄Π΅ трябва Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŽΡ‡Π°, Ρ‰Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ; систСмата няма Π΄Π° трябва Π΄Π° сС разсСйва ΠΎΡ‚ Π»ΠΈΠ½ΠΈΠΈ извън опрСдСлСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ слСдното сравнСниС Π½Π° производитСлността Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ заявки. Π•Ρ‚ΠΎ Π΅Π΄Π½Π° Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° заявка.

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ OFFSET ΠΈ LIMIT Π² ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки
Π‘Π°Π²Π½ΠΎ исканС

А Π΅Ρ‚ΠΎ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° вСрсия Π½Π° Ρ‚Π°Π·ΠΈ заявка.

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ OFFSET ΠΈ LIMIT Π² ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки
Π‘ΡŠΡ€Π·Π° заявка

И Π΄Π²Π΅Ρ‚Π΅ заявки Π²Ρ€ΡŠΡ‰Π°Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΡΡŠΡ‰ΠΎΡ‚ΠΎ количСство Π΄Π°Π½Π½ΠΈ. Но ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΎΡ‚Π½Π΅ΠΌΠ° 12,80 сСкунди, Π° вторият ΠΎΡ‚Π½Π΅ΠΌΠ° 0,01 сСкунди. УсСщатС Π»ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π°?

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ

Π—Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ прСдлоТСният ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° заявка, Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° трябва Π΄Π° ΠΈΠΌΠ° ΠΊΠΎΠ»ΠΎΠ½Π° (ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ), ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ, послСдоватСлни индСкси, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ цСлочислСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’ някои спСцифични случаи Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ успСха Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° заявки Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

ЕстСствСно, ΠΊΠΎΠ³Π°Ρ‚ΠΎ конструиратС заявки, трябва Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ спСцифичната Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ работят Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ. НапримСр, Π°ΠΊΠΎ трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π² заявки с Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ сС стори интСрСсно Ρ‚ΠΎΠ²Π° статия.

Ако смС ΠΈΠ·ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с липсата Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎ към ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° традиционният ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ OFFSET ΠΈ LIMIT, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°. Но ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ Π±Π°Π²Π½ΠΈ заявки. Π’ Ρ‚Π°ΠΊΠΈΠ²Π° случаи Π±ΠΈΡ… ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π» ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ нарастващ ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ само Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки.

Ако сС интСрСсуватС ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° - Ρ‚ΡƒΠΊ, Ρ‚ΡƒΠΊ ΠΈ Ρ‚ΡƒΠΊ - няколко ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΈΠ·Π²ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π΅, Ρ‡Π΅ нСзависимо Π·Π° какъв Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° скоростта Π½Π° изпълнСниС Π½Π° заявкитС. Π’ днСшно Π²Ρ€Π΅ΠΌΠ΅ скалируСмостта Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π²Π°ΠΆΠ½Π° ΠΈ Π°ΠΊΠΎ всичко Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π²ΡŠΡ€Ρ…Ρƒ Π΄Π°Π΄Π΅Π½Π° систСма, Ρ‚ΠΎΠ²Π° Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° спСсти Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Как Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ заявкитС към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ?

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ OFFSET ΠΈ LIMIT Π² ΠΏΠ°Π³ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ заявки

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

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