ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
(ΠΠ) β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΈΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ². Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΠ½Π΄Π΅ΠΊΡΡ ΡΡΠΊΠΎΡΡΡΡ ΠΏΠΎΠΈΡΠΊ Π΄Π°Π½Π½ΡΡ
, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠΎΡ
ΠΎΠΆΡΡ Π½Π° ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΡΠ°Π±Π»ΠΈΡΡ (Full Table Scan), ΠΠ Π±ΡΡΡΡΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ Π½ΡΠΆΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
CREATE INDEX idx_user_name ON users(name);
ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅
SELECT *
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠ»ΠΎΡ ΠΎ
SELECT * FROM users;
Π₯ΠΎΡΠΎΡΠΎ
SELECT id, name FROM users;
ΠΠ΅ΡΠ΅Π΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΠΠ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ.
EXPLAIN SELECT * FROM users WHERE name = 'Ivan';
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ N ΡΡΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
LIMIT
, ΡΡΠΎΠ±Ρ ΠΠ Π½Π΅ Π³ΡΡΠ·ΠΈΠ»Π° Π»ΠΈΡΠ½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. SELECT * FROM users ORDER BY id LIMIT 10;
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (
JOIN
) ΡΠ°Π±Π»ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΠΌ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ: - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π½Π° ΠΏΠΎΠ»ΡΡ , ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΡ Π²
JOIN
. - ΠΡΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅
JOIN
Π½Π° ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡΡ (EXISTS
, IN
). CREATE INDEX idx_orders_user_id ON orders(user_id);
Π§Π°ΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΠ (
QUERY CACHE
Π² MySQL) ΠΈΠ»ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ (Redis, Memcached). SET GLOBAL query_cache_size = 1000000;
ΠΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , ΡΠ°Π·Π±ΠΈΠ²Π°Ρ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΠ΅Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, Π΄ΡΠ±Π»ΠΈΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
JOIN
. Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Java ΠΊΠ½ΠΈΠ³