πŸ’ƒπŸ’ƒπŸ’ƒΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉ!

Когда я Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π² Π±Π°Π½ΠΊΠ΅, Ρƒ нас пСриодичСски ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎ письмо с особо ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ²ΡˆΠΈΠΌΠΈΡΡ сотрудниками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ своими запросами бСссовСстно Π²Ρ‹ΠΆΡ€Π°Π»ΠΈ всС рСсурсы Π² ΠΎΠ΄Π½Ρƒ ΠΌΠΎΡ€Π΄ΠΎΡ‡ΠΊΡƒ. Π—Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π°Π½ΠΊΠ°Ρ… Π·Π° Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π°ΡŽΡ‚ Β«ΠΆΠ΅Π»Ρ‚ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒΒ», Π° Ссли 2 Ρ€Π°Π·Π° провинился - ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΈ ΠΈΠ΄ΠΈ ΡƒΡ‡ΠΈΡΡŒ Π½Π° ΠΊΠΎΡ€ΠΌ курсах ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ сСбя вСсти. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ для развития ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠΆΠΊΡƒ Β«ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запрос Π² PostgreSQLΒ» (Домбровская Π“.) ΠΈ Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π²Π½ΠΈΠ·Ρƒ поста.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠΎΠΈΠ½Ρ‚Ρ‹ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ: 1. Π‘Π΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ запроса - это ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ количСства строк, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ количСству строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. 2. Запрос являСтся ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° количСство строк, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для получСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π½Π΅Π²Π΅Π»ΠΈΠΊΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Π²Π΅Π»ΠΈΠΊΠΈ задСйствованныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ запросы ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всС строки ΠΈΠ· ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, Π½ΠΎ лишь Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΈΜ† ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ строк ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†. 3. Запрос считаСтся Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ, Ссли ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ запроса высока ΠΏΠΎ ΠΊΡ€Π°ΠΈΜ†Π½Π΅ΠΈΜ† ΠΌΠ΅Ρ€Π΅ для ΠΎΠ΄Π½ΠΎΠΈΜ† ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Π½Π΅Π²Π΅Π»ΠΈΠΊ, опрСдСляСтся ΠΏΠΎΡ‡Ρ‚ΠΈ всСми строками. 4. Когда ΠΌΡ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΈΜ† запрос, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшоС количСство записСй. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ – ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ мноТСства ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅. Если Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… этапах выполнСния запроса примСняСтся самый строгий ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈΜ† Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π°Π»ΡŒΠ½Π΅ΠΈΜ†ΡˆΠΈΠ΅ сортировки, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ соСдинСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ. Π’ ΠΏΠ»Π°Π½Π΅ выполнСния Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сканирований Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†. 5. Если Π²Ρ‹ выполняСтС ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ прСобразования Π½Π°Π΄ ΠΏΠΎΠ»Π΅ΠΌ индСкса (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lower, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…), Ρ‚ΠΎ запрос Π½Π΅ смоТСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ индСксом. НуТно Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ условиС Π² запросС Π±Π΅Π· использования прСобразования, Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс. 6. Π’ случаС с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ запросами ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π΅ стратСгии ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… сканирований Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΈΜ† стадии. 7. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, составной индСкс ΠΏΠΎ столбцам (X, Y, Z) Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для поиска ΠΏΠΎ X, XY, XYZ ΠΈ Π΄Π°ΠΆΠ΅ XZ, Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Y ΠΈ Π½Π΅ ΠΏΠΎ YZ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ создании составного индСкса нСдостаточно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ столбцы Π² Π½Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ; Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… порядок. 8. Иногда ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² SQL ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ замСдлСнию. Π’Π°ΠΊΠΎΠ΅ часто случаСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘Ρ€Π°Π·Ρƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с:

  • индСксами (ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы, созданныС Π² исходной Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π½Π°ΠΌ Π»ΠΈΠ±ΠΎ придСтся ΠΎΠ±ΠΎΠΈΜ†Ρ‚ΠΈΡΡŒ Π±Π΅Π· индСксов, Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ рСсурсов)
  • мСстом Π½Π° дискС (ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° дискС), - опСрациями чтСния-запись (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ тратится врСмя)
  • статистикой (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ создали Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статистичСскиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ распрСдСлСнии Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈΜ† ΠΈΠ· исходной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†), поэтому Π½Π°ΠΌ придСтся Π»ΠΈΠ±ΠΎ ΠΎΠ±ΠΎΠΈΜ†Ρ‚ΠΈΡΡŒ Π±Π΅Π· статистики, Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ANALYZE для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΈΜ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹)

НСплохоС Π²ΠΈΠ΄Π΅ΠΎ ΠΏΡ€ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ ЕвгСния ΠšΡƒΠ΄Π°ΡˆΠ΅Π²Π° ЦИАН: https://www.youtube.com/watch?v=y6CWIBKEw_g

Π•Ρ‰Π΅ интСрСсная сСрия постов Π½Π° Ρ…Π°Π±Ρ€Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ запроса: https://habr.com/ru/articles/275851/ https://habr.com/ru/articles/276973/ https://habr.com/ru/articles/279255/

А Ρ‚ΡƒΡ‚ Π΄Π²Π° ΠΌΠΎΠΈΡ… поста ΠΏΡ€ΠΎ ΠΊΠΎΠ΄-стайл SQL: https://t.me/data1sm/215 https://t.me/data1sm/217