πŸ” Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° explain Π² SQL? Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш запрос

Команда "explain" Π² SQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ выполнСния запросов. Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π‘Π£Π‘Π” выполняСт запрос ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ "explain":

    EXPLAIN SELECT * FROM customers WHERE age > 30;
    
Π­Ρ‚ΠΎΡ‚ запрос ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΏΠ»Π°Π½ выполнСния запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ просканированы, ΠΊΠ°ΠΊΠΈΠ΅ индСксы Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. По этим Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ студСнт!

НадСюсь, ΡƒΡ‡Π΅Π±Π° ΠΈΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. БСгодня я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅Π±Π΅ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ EXPLAIN Π² SQL. EXPLAIN - это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ SQL-запрос ΠΈ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запросов ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π”Π°Π²Π°ΠΉ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ тСбя Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° users, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится информация ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ…, ΠΈ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΡ‚Π°Ρ€ΡˆΠ΅ 18 Π»Π΅Ρ‚:

SELECT * FROM users WHERE age > 18;

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ этот запрос, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ EXPLAIN. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это дСлаСтся:

EXPLAIN SELECT * FROM users WHERE age > 18;

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ»Π°Π½ выполнСния запроса Π±ΡƒΠ΄Π΅Ρ‚ использован. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra
---+-------------+-------+------------+------+---------------+------+---------+------+----------+--------+
 1 | SIMPLE      | users | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1000 |   10.00  | NULL

Π”Π°Π²Π°ΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ разбСрСмся, Ρ‡Ρ‚ΠΎ эти значСния ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚:

  • id: Π½ΠΎΠΌΠ΅Ρ€ шага Π² ΠΏΠ»Π°Π½Π΅ выполнСния запроса.
  • select_type: Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это SIMPLE, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ простой SELECT-запрос.
  • table: имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся опСрация.
  • partitions: Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ (Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ).
  • type: Ρ‚ΠΈΠΏ доступа ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ ALL, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ просмотрСны.
  • possible_keys: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для выполнСния запроса.
  • key: индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для выполнСния запроса.
  • key_len: Π΄Π»ΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ индСкса.
  • ref: столбСц ΠΈΠ»ΠΈ константа, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для доступа ΠΊ строкС.
  • rows: количСство строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ просмотрСны.
  • filtered: ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ строк, ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… запросом.
  • Extra: Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΎΡ‚ EXPLAIN, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса. НапримСр, Π² нашСм случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс Π½Π° столбСц age, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ возрасту.

Π’Π°ΠΊΠΆΠ΅, ΠΎΠ±Ρ€Π°Ρ‚ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° значСния Π² столбцС rows. Они ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, сколько записСй Π±ΡƒΠ΄Π΅Ρ‚ просмотрСно ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса. Если это число слишком большоС, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° EXPLAIN являСтся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ инструмСнтом для понимания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ SQL-запрос Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ индСксы ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы.

НадСюсь, эта информация Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для тСбя! Π£Π΄Π°Ρ‡ΠΈ Π² ΡƒΡ‡Π΅Π±Π΅ ΠΈ ΠΊΠΎΠ΄ΠΈΠ½Π³Π΅!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Команда explain в MySQL

SQL для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…: Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² PostgreSQL # Π’ΠΈΠ΄Ρ‹ индСксов SQL # EXPLAIN, ANALYZE

ВидСокурс PostgreSQL #7 | Explain ΠΈ оптимизация запросов

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Как Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΈΡΠ°Ρ‚ΡŒ SQL запросы с нуля: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ” Как вывСсти Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² psql: шаги ΠΈ инструкция

πŸ” Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° explain Π² SQL? Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш запрос

Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ послСдниС 10 строк Π² SQL: простой Π³Π°ΠΉΠ΄

ΠšΡ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊ SQL ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Ρƒ Π½Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…?