Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
VPS Администрация Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов MySQL: ПолноС руководство ΠΏΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π΅Π±-сайты ΠΈ Π²Π΅Π±-прилоТСния большС, Ρ‡Π΅ΠΌ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ, зависят ΠΎΡ‚ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, управляСтС Π»ΠΈ Π²Ρ‹ нСбольшим Π±Π»ΠΎΠ³ΠΎΠΌ ΠΈΠ»ΠΈ высоконагруТСнной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ, MySQL остаСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… систСм рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΌΠΈΡ€Π΅ β€” ΠΈ Π½Π΅ Π±Π΅Π· ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹. Она мощная, гибкая ΠΈ провСрСнная Π² Π±ΠΎΠ΅Π²Ρ‹Ρ… условиях. Но ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ запросы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° сСрвСр ΠΈ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

Π’ этом ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌ руководствС ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ MySQL запросов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌΠΈ администраторами Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ DevOps. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, управляСтС Π»ΠΈ Π²Ρ‹ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ VPS Hosting, Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Dedicated Server ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ срСдой, эти стратСгии ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ вашСй MySQL установки.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ оптимизация MySQL запросов ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, стоит ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρƒ. Один Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ запрос ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ строк ΠΌΠΎΠΆΠ΅Ρ‚:

  • ΠŸΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½Ρ‹Π΅ рСсурсы CPU ΠΈ памяти
  • Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌΡƒ доступу ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ
  • Π’Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ каскадныС замСдлСния Π²ΠΎ всСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
  • Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° инфраструктуру ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запросов β€” это Π½Π΅ одноразовая Π·Π°Π΄Π°Ρ‡Π°, Π° постоянная дисциплина, которая приносит растущиС Π΄ΠΈΠ²ΠΈΠ΄Π΅Π½Π΄Ρ‹ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ индСксы Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ

Π˜Π½Π΄Π΅ΠΊΡΡ‹, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивным инструмСнтом Π² вашСм арсСналС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ MySQL. Π‘Π΅Π· Π½ΠΈΡ… MySQL выполняСт ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€” для поиска ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… записСй. На Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… это катастрофичСски ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ индСксы

ИндСкс создаСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ B-Π΄Π΅Ρ€Π΅Π²ΠΎ), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ MySQL ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒ Π² логарифмичСском Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ вмСсто Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ. Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎΠ± ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ Π² ΠΊΠΎΠ½Ρ†Π΅ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°: вмСсто чтСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы для поиска Ρ‚Π΅ΠΌΡ‹ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ прямо Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ страницу.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ индСксирования

  • Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΠΉΡ‚Π΅ столбцы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² WHERE, JOIN ΠΈ ORDER BY прСдлоТСниях β€” это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚ индСксов
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ составныС индСксы для запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‚ нСсколько столбцов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
  • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ индСксирования β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс добавляСт Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΊ опСрациям INSERT, UPDATE ΠΈ DELETE, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ MySQL Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ индСкс вмСстС с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всС столбцы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ запросу, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ доступа ΠΊ фактичСским строкам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: созданиС индСкса с ΠΎΠ΄Π½ΠΈΠΌ столбцом

CREATE INDEX idx_email ON users (email);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: созданиС составного индСкса

CREATE INDEX idx_status_created ON orders (status, created_at);

Π­Ρ‚ΠΎΡ‚ составной индСкс эффСктивно обслуТиваСт запросы Ρ‚ΠΈΠΏΠ°:

SELECT * FROM orders WHERE status = 'pending' ORDER BY created_at DESC;

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… индСксов

SHOW INDEX FROM users;

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ индСксированиС само ΠΏΠΎ сСбС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя выполнСния запроса с сСкунд Π΄ΠΎ миллисСкунд Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ….

2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ваши SELECT запросы

Один ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Ρ… Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ SQL β€” это использованиС SELECT *. Π­Ρ‚ΠΎ каТСтся ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, Π½ΠΎ это заставляСт MySQL ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ столбСц Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€” Π²ΠΊΠ»ΡŽΡ‡Π°Ρ большиС TEXT ΠΈΠ»ΠΈ BLOB поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ β€” ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ сСти.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

  • Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Ρ‹ β€” это ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, использованиС памяти ΠΈ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ LIMIT для разбиСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½Π° страницы β€” Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подмноТСство
  • ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ β€” COUNT(), SUM() ΠΈ AVG() эффСктивны, Π½ΠΎ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с нСиндСксированными столбцами ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ дорогостоящим
  • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ DISTINCT Ссли это Π½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ β€” это добавляСт этап Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ дорогостоящим Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π”ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

SELECT * FROM users WHERE status = 'active';

ПослС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

SELECT user_id, name, email FROM users WHERE status = 'active' LIMIT 100;

Π­Ρ‚ΠΎ каТущССся нСбольшим ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π·ΠΊΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ врСмя выполнСния запроса, особСнно Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… с дСсятками столбцов ΠΈΠ»ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ строк.

3. АнализируйтС запросы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EXPLAIN ΠΈ EXPLAIN ANALYZE

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ EXPLAIN β€” это ваш самый ΠΌΠΎΡ‰Π½Ρ‹ΠΉ диагностичСский инструмСнт. Он раскрываСт ΠΏΠ»Π°Π½ выполнСния запроса MySQL β€” Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для получСния Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… β€” Π±Π΅Π· фактичСского выполнСния запроса.

Π§Ρ‚ΠΎ Π²Π°ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ EXPLAIN

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†Π§Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚
typeΠ’ΠΈΠΏ соСдинСния β€” ALL ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (ΠΏΠ»ΠΎΡ…ΠΎ); ref ΠΈΠ»ΠΈ eq_ref Ρ…ΠΎΡ€ΠΎΡˆΠΎ
keyКакой индСкс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ MySQL (ΠΈΠ»ΠΈ NULL Ссли Π½Π΅Ρ‚)
rowsΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ количСство строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ MySQL Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ
ExtraΠ”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация β€” ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Using filesort ΠΈΠ»ΠΈ Using temporary

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ EXPLAIN

EXPLAIN SELECT address FROM employees WHERE status = 'active';

EXPLAIN ANALYZE (MySQL 8.0+)

EXPLAIN ANALYZE SELECT address FROM employees WHERE status = 'active';

EXPLAIN ANALYZE фактичСски выполняСт запрос ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ синхронизации вмСстС с ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠ»Π°Π½ΠΎΠΌ выполнСния β€” бСсцСнно для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ Π½Π° самом Π΄Π΅Π»Π΅ тратится врСмя.

ΠšΡ€Π°ΡΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

  • type: ALL β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° большой Ρ‚Π°Π±Π»ΠΈΡ†Π΅
  • key: NULL β€” индСкс Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ
  • Extra: Using filesort β€” MySQL сортируСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π° дискС вмСсто использования индСкса
  • Extra: Using temporary β€” MySQL создаСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ интСнсивного использования памяти ΠΈ CPU

Когда Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ эти ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСксы, ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ запрос ΠΈΠ»ΠΈ Ρ€Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ схСму.

4. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ JOIN

JOINΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ частой ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. НСоптимизированный JOIN ΠΌΠ΅ΠΆΠ΄Ρƒ двумя большими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти сСрвСр Π² Π½Π΅Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ состояниС.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JOIN

  • ВсСгда индСксируйтС столбцы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² условиях JOIN β€” это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ваТная оптимизация JOIN
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ INNER JOIN ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки β€” это Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ‡Π΅ΠΌ LEFT JOIN ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ с Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ NULL
  • Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ Ρ€Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ WHERE ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΠΉΡ‚Π΅ количСство строк, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² объСдинСнии, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅
  • ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° порядок объСдинСния β€” ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов MySQL ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Π½ΠΎ Π² слоТных запросах объСдинСниС ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ JOIN

SELECT c.name, o.order_date, o.total_amount
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id
WHERE c.country = 'Germany'
  AND o.status = 'completed'
ORDER BY o.order_date DESC
LIMIT 50;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

  • Оба c.id ΠΈ o.customer_id Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ индСксированы (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ это автоматичСски Π² InnoDB)
  • c.country ΠΈ o.status Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚ индСксов
  • LIMIT 50 ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ нСявных JOIN

Π‘Ρ‚Π°Ρ€Ρ‹Π΅ объСдинСния, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми, слоТнСС Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

-- Avoid this
SELECT * FROM customers, orders WHERE customers.id = orders.customer_id;

-- Prefer this
SELECT * FROM customers INNER JOIN orders ON customers.id = orders.customer_id;

5. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ объСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Помимо ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов, сниТСниС объСма Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ MySQL Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, являСтся высокоэффСктивной стратСгиСй.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

  • АгрСссивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ WHERE Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ β€” каТдая ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Π°Ρ строка β€” это строка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ MySQL Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ
  • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… подзапросов β€” ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки внСшнСго запроса ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ катастрофичСски ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ; пСрСписывайтС ΠΈΡ… ΠΊΠ°ΠΊ JOINs Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
  • Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния β€” инструмСнты Π²Ρ€ΠΎΠ΄Π΅ Redis ΠΈΠ»ΠΈ Memcached ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· обращСния ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • РаздСляйтС большиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€” функция раздСлСния Ρ‚Π°Π±Π»ΠΈΡ† MySQL позволяСт запросам ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» вмСсто всСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
  • АрхивируйтС старыС Π΄Π°Π½Π½Ρ‹Π΅ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ историчСских записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π°Ρ€Ρ…ΠΈΠ²Π° сохраняСт ваши Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ ΠΈ быстрыми

ΠšΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ подзапрос (ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅)

SELECT name FROM employees e
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΊ JOIN (ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ)

SELECT e.name
FROM employees e
INNER JOIN (
    SELECT department_id, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department_id
) dept_avg ON e.department_id = dept_avg.department_id
WHERE e.salary > dept_avg.avg_salary;

ВСрсия с JOIN вычисляСт срСдниС значСния ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»Π°ΠΌ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки сотрудника.

6. Вонкая настройка ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ MySQL Server

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ запросов β€” это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° уравнСния. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра MySQL ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ консСрвативны β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° минимальном ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, Π° Π½Π΅ для максимизации пропускной способности.

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

innodb_buffer_pool_size

Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ InnoDB. Он ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚, сколько RAM MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ индСксов Π² памяти. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· RAM Π½Π° порядки быстрСС, Ρ‡Π΅ΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с диска.

РСкомСндация: УстановитС это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° 50–70% ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ доступного RAM Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

innodb_buffer_pool_size = 4G  # For an 8GB RAM server

innodb_log_file_size

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΆΡƒΡ€Π½Π°Π»Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ записи, позволяя Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ количСству Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄ сбросом Π½Π° диск.

innodb_log_file_size = 512M

query_cache_size (MySQL 5.x)

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Кэш запросов Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½ Π² MySQL 8.0 ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ MySQL 5.7, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ β€” ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ для Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, интСнсивных ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ, Π½ΠΎ становится ΡƒΠ·ΠΊΠΈΠΌ мСстом ΠΏΡ€ΠΈ высоких Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°Ρ… Π½Π° запись.

max_connections

УстановитС это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° основС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡƒΠ»Π° соСдинСний вашСго прилоТСния. Блишком высокоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рискуСт истощСниСм памяти; слишком Π½ΠΈΠ·ΠΊΠΎΠ΅ ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ошибки β€œΡΠ»ΠΈΡˆΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ соСдинСний”.

max_connections = 200

slow_query_log

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ это, Ρ‡Ρ‚ΠΎΠ±Ρ‹ автоматичСски Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния β€” Π²Π°ΠΆΠ½Ρ‹ΠΉ инструмСнт для выявлСния Ρ†Π΅Π»Π΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² production.

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1  # Log queries taking longer than 1 second

Π“Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ MySQL, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ располоТСнном Π² /etc/mysql/my.cnf ΠΈΠ»ΠΈ /etc/my.cnf. ПослС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ сСрвис MySQL:

sudo systemctl restart mysql

Если Π²Ρ‹ управляСтС собствСнной сСрвСрной срСдой, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа root β€” ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ с Dedicated Server β€” Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ этими конфигурациями уровня систСмы.

7. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ MySQL ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ нСсколько Ρ€Π°Π· с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎ сниТаСт Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ.

PREPARE stmt FROM 'SELECT name, email FROM users WHERE id = ?';
SET @id = 42;
EXECUTE stmt USING @id;

НормализуйтС Π²Π°ΡˆΡƒ схСму β€” Π½ΠΎ Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Нормализация Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… устраняСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ обСспСчиваСт Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Однако высоконормализованныС схСмы ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ слоТныС ΠΌΠ½ΠΎΠ³ΠΎΡ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ JOINs для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… запросов. Π’ прилоТСниях с интСнсивным Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ стратСгичСская дСнормализация β€” Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для избСТания дорогостоящих JOINs β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ обоснованным компромиссом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ COUNT(1) ΠΈΠ»ΠΈ COUNT(column) вмСсто COUNT(*)

Π₯отя соврСмСнный MySQL эффСктивно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ COUNT(*) для InnoDB, использованиС COUNT(1) ΠΈΠ»ΠΈ подсчСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ индСксированного столбца ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Performance Schema

ВстроСнная Performance Schema MySQL обСспСчиваСт Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ выполнСния запросов, событий оТидания ΠΈ потрСблСния рСсурсов β€” Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ, Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΡƒΡ€Π½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов.

SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC
LIMIT 10;

Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ срСды хостинга для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ MySQL

Π’Π°ΡˆΠΈ усилия ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ эффСктивны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, насколько эффСктивна инфраструктура ΠΏΠΎΠ΄ Π½ΠΈΠΌΠΈ. Запуск ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… MySQL Π½Π° ΠΌΠ°Π»ΠΎΠΌΠΎΡ‰Π½ΠΎΠΌ ΠΎΠ±Ρ‰Π΅ΠΌ хостингС β€” это ΠΊΠ°ΠΊ настройка двигатСля Π³ΠΎΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ автомобиля, Π° Π·Π°Ρ‚Π΅ΠΌ установка Π΅Π³ΠΎ Π² Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с спущСнными шинами.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ срСды хостинга Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ MySQL:

  • Shared Web Hosting β€” ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Π΅Π±-сайтов ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π½ΠΈΠ·ΠΊΠΈΠΌ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ. РСсурсы MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ совмСстно с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ возмоТности настройки ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сСрвСра.
  • VPS Hosting β€” ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для растущих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ рСсурсы, root-доступ для настройки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ MySQL ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ установки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… вСрсий ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² MySQL. Для ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΡ… графичСский интСрфСйс управлСния, VPS с cPanel Π΄Π΅Π»Π°Π΅Ρ‚ администрированиС Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ доступным.
  • Dedicated Servers β€” для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с высоким Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр прСдоставляСт ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊΠΎ всСм Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ рСсурсам, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»Π½ΡƒΡŽ свободу ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ MySQL Π½Π° всСх уровнях.

Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ уровня инфраструктуры β€” это ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт ΠΏΠΎΡ‚ΠΎΠ»ΠΎΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ MySQL, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ написаны ваши запросы.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов MySQL

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список ΠΊΠ°ΠΊ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ справку ΠΏΡ€ΠΈ Π°ΡƒΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

  • [ ] Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π»ΠΈ часто Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ столбцы?
  • [ ] Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π»ΠΈ составныС индСксы для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² с нСсколькими столбцами?
  • [ ] Π—Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π»ΠΈ SELECT * Π½Π° списки ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… столбцов?
  • [ ] Π Π°Π·Π±ΠΈΡ‚Ρ‹ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π½Π° страницы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LIMIT?
  • [ ] ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π»ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΆΡƒΡ€Π½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов?
  • [ ] Π—Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ EXPLAIN для всСх критичСских запросов?
  • [ ] Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π»ΠΈ столбцы JOIN?
  • [ ] УстановлСн Π»ΠΈ innodb_buffer_pool_size Π½Π° 50–70% доступной RAM?
  • [ ] Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ Π»ΠΈ ΠΆΡƒΡ€Π½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов Π² production?
  • [ ] ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Π½Ρ‹ Π»ΠΈ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ подзапросы ΠΊΠ°ΠΊ JOIN Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ?

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

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запросов MySQL β€” это Π½Π΅ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π° постоянная инТСнСрная дисциплина, которая развиваСтся вмСстС с вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, описанныС Π² этом руководствС β€” стратСгичСскоС индСксированиС, Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Π΅ SELECT ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, EXPLAIN-управляСмый Π°Π½Π°Π»ΠΈΠ· запросов, эффСктивныС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ JOIN, сокращСниС объСма Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ настройка Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сСрвСра β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ основу для создания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… срСд Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΠ΅ влияниС этих ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: Π±ΠΎΠ»Π΅Π΅ быстрая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° страниц, Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹Π΅ прилоТСния, сниТСниС Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° инфраструктуру ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΎΠΏΡ‹Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ с вашСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ.

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈ Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° Shared Web Hosting ΠΈΠ»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ критичСски Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Dedicated Server, инвСстированиС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ MySQL β€” это ΠΎΠ΄Π½Π° ΠΈΠ· Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠ΅ΠΉ ΠΎΠΊΡƒΠΏΠ°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ инвСстиций, доступная Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΈΠ»ΠΈ систСмному администратору. НачнитС с ΠΆΡƒΡ€Π½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов, ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ EXPLAIN, ΠΈ Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ ΠΏΠΈΡΠ°Ρ‚ΡŒ эффСктивный SQL с самого Π½Π°Ρ‡Π°Π»Π° β€” ваши ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, ваш сСрвСр ΠΈ ваш счСт Π·Π° инфраструктуру Π±ΡƒΠ΄ΡƒΡ‚ Π²Π°ΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½Ρ‹.