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 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
JOINs ΡΠ° ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈ Π·Π° ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΡΠ΅ ΡΡΡΠΎ ΡΠ° ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΠ΅ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ JOIN ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ ΡΡΡΠ²ΡΡΠ° Π΄ΠΎ ΠΊΠΎΠ»Π°ΠΏΡ.
ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° JOIN
- ΠΠΈΠ½Π°Π³ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² JOIN ΡΡΠ»ΠΎΠ²ΠΈΡ β ΡΠΎΠ²Π° Π΅ Π½Π°ΠΉ-Π²Π°ΠΆΠ½Π°ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° JOIN
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅
INNER JOINΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΡΠ°ΠΌΠΎ ΠΎΡ ΡΡΠ²ΠΏΠ°Π΄Π°ΡΠΈ ΡΠ΅Π΄ΠΎΠ²Π΅ β ΡΠΎΠ²Π° Π΅ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡLEFT JOINΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ NULL-ΠΏΠΎΠΏΡΠ»Π½Π΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ - Π€ΠΈΠ»ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°Π½ΠΎ Ρ
WHEREΠΊΠ»Π°ΡΠ·ΡΠ»ΠΈ β Π½Π°ΠΌΠ°Π»Π΅ΡΠ΅ Π±ΡΠΎΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅, ΡΡΠ°ΡΡΠ²Π°ΡΠΈ Π² join, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠ°Π½ΠΎ - ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π΄Π° Π½Π° join β ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ Π½Π° 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ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ
ΠΠ·Π±ΡΠ³Π²Π°ΠΉΡΠ΅ Π½Π΅ΡΠ²Π½ΠΈ JOINs
Π‘ΡΠ°ΡΠΎΠΌΠΎΠ΄Π½ΠΈΡΠ΅ 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 ΡΠ΅ΡΠ²ΡΡΠ°
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Π½ΠΈΠ²ΠΎ Π·Π°ΡΠ²ΠΊΠΈ Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° MySQL ΡΡΡΠ²ΡΡΠ° ΠΈΠΌΠ°Ρ Π΄ΡΠ»Π±ΠΎΠΊΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π²ΡΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ° ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΠΈ β ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Ρ Π°ΡΠ΄ΡΠ΅Ρ, Π° Π½Π΅ Π΄Π° ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
ΠΡΠΈΡΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°
innodb_buffer_pool_size
Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° InnoDB. Π’ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΠΊΠΎΠ»ΠΊΠΎ RAM MySQL ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ. Π§Π΅ΡΠ΅Π½ΠΈΡΡΠ° ΠΎΡ RAM ΡΠ° Ρ ΠΏΠΎΡΡΠ΄ΡΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΈ ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ° ΠΎΡ Π΄ΠΈΡΠΊ.
ΠΡΠ΅ΠΏΠΎΡΡΠΊΠ°: ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ²Π° Π½Π° 50β70% ΠΎΡ ΠΎΠ±ΡΠΎ Π½Π°Π»ΠΈΡΠ½Π° RAM Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΡΡΡΠ²ΡΡ Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.
innodb_buffer_pool_size = 4G # For an 8GB RAM serverinnodb_log_file_size
ΠΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ Π³ΡΡΠΏΠΈΡΠ°Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠΊ.
innodb_log_file_size = 512Mquery_cache_size (MySQL 5.x)
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΠ΅ΡΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°Ρ Π² MySQL 8.0 ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΡΡ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡΠ°. ΠΠΊΠΎ ΡΡΠ΅ Π½Π° MySQL 5.7, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π³ΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ β ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π·Π° ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² ΡΠ΅ΡΠ½ΠΎ ΠΌΡΡΡΠΎ ΠΏΡΠΈ Π²ΠΈΡΠΎΠΊΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ.
max_connections
ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ²Π° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π²ΡΡΠ΄Π΅ Π²ΠΈΡΠΎΠΊΠΎ ΠΈ ΡΠΈΡΠΊΡΠ²Π°ΡΠ΅ ΠΈΠ·ΡΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ; ΡΠ²ΡΡΠ΄Π΅ Π½ΠΈΡΠΊΠΎ ΠΈ ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ βΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅β.
max_connections = 200slow_query_log
ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΎΠ²Π°, Π·Π° Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΡΠ°Π³ Π½Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ β ΡΡΡΠ΅ΡΡΠ²Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΡΠ΅ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ.
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 injection.
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 ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π΄Π΅ΡΠ°ΠΉΠ»Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ Π² ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΎΠ±ΡΡΠΈΡ Π½Π° ΡΠ°ΠΊΠ°Π½Π΅ ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ β ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄Π΅ΡΠ°ΠΉΠ»Π½Π° ΠΎΡ ΡΠ°ΠΌΠΈΡ slow query log.
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC
LIMIT 10;ΠΠ·Π±ΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΠ΅Π΄Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° MySQL
ΠΠ°ΡΠΈΡΠ΅ ΡΡΠΈΠ»ΠΈΡ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° ΠΏΠΎΠ΄ ΡΡΡ . ΠΡΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ»Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½Π° MySQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΡΠ»Π°Π±ΠΎ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Ρ ΠΎΡΡΠΈΠ½Π³ Π΅ ΠΊΠ°ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» Π½Π° ΡΡΡΡΠ΅Π·Π°ΡΠ΅Π»Π΅Π½ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ» ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ·Π½ΠΎΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Ρ ΡΠΏΡΠΊΠ°Π½ΠΈ Π³ΡΠΌΠΈ.
ΠΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΠ΅Π΄ΠΈ Π²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° MySQL:
- Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΡΠ΅Π± Ρ ΠΎΡΡΠΈΠ½Π³ β ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° Π·Π° ΠΌΠ°Π»ΠΊΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π½ΠΈΡΡΠΊ ΡΡΠ°ΡΠΈΠΊ. MySQL ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»ΡΡ Ρ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΡΠ²ΡΡ.
- VPS Ρ ΠΎΡΡΠΈΠ½Π³ β ΠΠ΄Π΅Π°Π»Π½ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π° ΡΠ°ΡΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, root Π΄ΠΎΡΡΡΠΏ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° MySQL ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ MySQL Π²Π΅ΡΡΠΈΠΈ ΠΈ ΠΏΡΠΈΡΡΠ°Π²ΠΊΠΈ. ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, VPS Ρ cPanel ΠΏΡΠ°Π²ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΡΡΡΠΏΠ½ΠΎ.
- ΠΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ β ΠΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΠΈΡΠΎΠΊ ΡΡΠ°ΡΠΈΠΊ ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡΡ ΡΡΡΠ²ΡΡ Π²ΠΈ Π΄Π°Π²Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΠΈΡΠΊΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΏΡΠΎΠΏΡΡΠΊΠ»ΠΈΠ²ΠΎΡΡ Π½Π° I/O ΠΈ ΠΏΡΠ»Π½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π° Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ MySQL Π½Π° Π²ΡΡΠΊΠΎ Π½ΠΈΠ²ΠΎ.
ΠΠ·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅Π½ ΡΠ»ΠΎΠΉ Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π²Π°ΡΠΈΡ MySQL, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΎΠ±ΡΠ΅ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π²Π°ΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ.
MySQL Query Optimization Checklist
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΊΠ°ΡΠΎ Π±ΡΡΠ·Π° ΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΡΠΈ ΠΎΠ΄ΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π²Π°ΡΠ°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ:
- [ ] ΠΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈ Π»ΠΈ ΡΠ° ΡΠ΅ΡΡΠΎ Π·Π°ΡΠ²ΡΠ²Π°Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ?
- [ ] ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π»ΠΈ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠ½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π·Π° ΡΠΈΠ»ΡΡΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΈ?
- [ ] ΠΠ°ΠΌΠ΅Π½Π΅Π½ΠΈ Π»ΠΈ ΡΠ°
SELECT *ΠΈΠ·ΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΡΠΏΠΈΡΡΡΠΈ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ? - [ ] Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ Π»ΠΈ ΡΠ° Π½Π°Π±ΠΎΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Ρ
LIMIT? - [ ] ΠΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ Π»ΠΈ ΡΠ° Π±Π°Π²Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Ρ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π½Π° Π±Π°Π²Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ?
- [ ] Π‘ΡΠ°ΡΡΠΈΡΠ°Π½ Π»ΠΈ Π΅
EXPLAINΠ½Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ? - [ ] ΠΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈ Π»ΠΈ ΡΠ° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅ Π½Π° JOIN?
- [ ] Π£ΡΡΠ°Π½ΠΎΠ²Π΅Π½ Π»ΠΈ Π΅
innodb_buffer_pool_sizeΠ½Π° 50β70% ΠΎΡ Π½Π°Π»ΠΈΡΠ½ΠΈΡ RAM? - [ ] ΠΠΊΠ»ΡΡΠ΅Π½ Π»ΠΈ Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΡΡ Π½Π° Π±Π°Π²Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² production?
- [ ] ΠΡΠ΅ΠΏΠΈΡΠ°Π½ΠΈ Π»ΠΈ ΡΠ° ΠΊΠΎΡΠ΅Π»ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π·Π°ΡΠ²ΠΊΠΈ ΠΊΠ°ΡΠΎ JOINs, ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ?
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° MySQL Π·Π°ΡΠ²ΠΊΠΈ Π½Π΅ Π΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½Π° Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° Π·Π°Π΅Π΄Π½ΠΎ Ρ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π°Π½Π½ΠΈ. Π’Π΅Ρ
Π½ΠΈΠΊΠΈΡΠ΅, ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π² ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ β ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠ΅ΡΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½Π΅, ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΈ SELECT ΠΈΠ·ΡΠ²Π»Π΅Π½ΠΈΡ, EXPLAIN-ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ JOIN ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΡΠ²ΡΡ β ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ Π²ΡΠ΅ΠΎΠ±Ρ
Π²Π°ΡΠ½Π° ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ΅Π΄ΠΈ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.
ΠΡΠΌΡΠ»Π°ΡΠΈΠ²Π½ΠΈΡΡ Π΅ΡΠ΅ΠΊΡ Π½Π° ΡΠ΅Π·ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½: ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅, ΠΏΠΎ-ΠΎΡΠ·ΠΈΠ²ΡΠΈΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎ-Π½ΠΈΡΠΊΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΎ ΠΈΠ·ΠΆΠΈΠ²ΡΠ²Π°Π½Π΅ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π²Π°ΡΠ°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΡΠ΅ΠΏΡΡΠ²Π° Π·Π°ΠΏΠΎΡΠ²Π°ΡΠ΅ Π½Π° Shared Web Hosting ΠΈΠ»ΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Dedicated Server, ΠΈΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅ Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° MySQL Π΅ Π΅Π΄Π½Π° ΠΎΡ Π΄Π΅ΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊ ROI, Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ. ΠΠ°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Ρ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π½Π° Π±Π°Π²Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠ΅Π· Π²Π°ΡΠΈΡ EXPLAIN ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈ ΡΠ°Π·Π²ΠΈΠΉΡΠ΅ Π½Π°Π²ΠΈΠΊΠ° Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ SQL ΠΎΡ ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ β Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, Π²Π°ΡΠΈΡΡ ΡΡΡΠ²ΡΡ ΠΈ Π²Π°ΡΠ°ΡΠ° ΡΠΌΠ΅ΡΠΊΠ° Π·Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΡΠ΅ Π²ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡΡ.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ