Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«MySQL 5.0. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор Π’ΠΈΠΊΡ‚ΠΎΡ€ Π“ΠΎΠ»ΡŒΡ†ΠΌΠ°Π½

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

ΠŸΡ€ΠΈ создании индСкса для Π³Ρ€ΡƒΠΏΠΏΡ‹ столбцов Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ столбцов Π² индСксС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² запросах ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‡Π°ΡΡ‚ΡŒ многостолбцового индСкса, состоящая ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… столбцов. НапримСр, Ссли Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Orders (Π—Π°ΠΊΠ°Π·Ρ‹) Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс

INDEX (date,product_id,customer_id)

Ρ‚ΠΎ ΠΎΠ½ ускорит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запросов

SELECT * FROM Orders WHERE date=CURDATE();

SELECT * FROM Orders

WHERE date=CURDATE() AND product_id=3;

Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ бСсполСзСн ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запросов

SELECT * FROM Orders WHERE product_id=3;

SELECT * FROM Orders

WHERE product_id=3 AND customer_id=533;

β€’ Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ индСксы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ цСлСсообразно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ цСлочислСнный столбСц с наимСньшим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ. ΠŸΡ€ΠΈ создании индСкса для символьного столбца ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ индСкса, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² Π½Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ подстроки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (см. ΠΏΡƒΠ½ΠΊΡ‚ Β«ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы ΠΈ индСксы»); количСство индСксируСмых символов ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство строк с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ подстрокой.

НаконСц, для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π°Π±Π»ΠΈΡ† Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ свойства Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

β€’ AVG_ROW_LENGTH <Π Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ…>, MAX ROWS <ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк>.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих свойств Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ, соотвСтствСнно, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡƒΡŽ ΡΡ€Π΅Π΄Π½ΡŽΡŽ Π΄Π»ΠΈΠ½Ρƒ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ максимальноС количСство строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… динамичСских Ρ‚Π°Π±Π»ΠΈΡ† MyISAM: ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ MySQL ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ индСксов.

β€’ DELAY_KEY_WRITE 1.

Π—Π°Π΄Π°Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° для Ρ‚Π°Π±Π»ΠΈΡ† MyISAM Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ записи Π½Π° диск Π±ΡƒΡ„Π΅Ρ€Π° индСксов. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ индСксов ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ записСй благодаря Π±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π΄ΠΊΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊ диску.

β€’ PACK_KEYS <0, 1 ΠΈΠ»ΠΈ DEFAULT>.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Ρ‚Π°Π±Π»ΠΈΡ† MyISAM опрСдСляСт Ρ€Π΅ΠΆΠΈΠΌ сТатия индСксов. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сТатиС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ для числовых индСксов. Π­Ρ‚ΠΎ ускоряСт поиск ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π½ΠΎ замСдляСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ индСксов. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ числовых индСксов Π΄Π°Π΅Ρ‚ наибольший эффСкт Π² случаС большого количСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ чисСл. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ DEFAULT ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΏΠ»ΠΎΡ‚Π½ΡΡ‚ΡŒΡΡ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ индСксы, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сТатиС.

β€’ ROW_FORMAT <Π€ΠΎΡ€ΠΌΠ°Ρ‚>

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Π°Π±Π»ΠΈΡ†Π° с Ρ‚ΠΈΠΏΠΎΠΌ InnoDB ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ COMPACT ΠΈΠ»ΠΈ REDUNDANT. Π€ΠΎΡ€ΠΌΠ°Ρ‚ COMPACT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Ρ‚ΠΈΠΏΠΎΠΌ MyISAM Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FIXED (статичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚) ΠΈΠ»ΠΈ DYNAMIC (динамичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ статичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ нСльзя ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, содСрТащСй столбцы с Ρ‚ΠΈΠΏΠΎΠΌ TINYBLOB, TINYTEXT, BLOB, TEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB ΠΈ LONGTEXT: Ссли Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ для Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ статичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΎΠ½ автоматичСски измСнится Π½Π° динамичСский....

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ фактичСски присвоСны Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ SHOW TABLE STATUS; Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ столбцС Row_format Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Если Π²Ρ‹ приняли всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ структуры Ρ‚Π°Π±Π»ΠΈΡ†, Π½ΠΎ запросы всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, попытаСмся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивными сами запросы.

6.2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ запросов

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ способом ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов ΡΠ²Π»ΡΡŽΡ‚ΡΡ индСксы. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ созданныС Π²Π°ΠΌΠΈ индСксы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ запросом, позволяСт ΠΊΠΎΠΌΠ°Π½Π΄Π°

EXPLAIN <ВСкст запроса>;

Набор Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ EXPLAIN, содСрТит Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ…ΠΎΠ΄Π΅ выполнСния запроса. КаТдая строка Π² этом Π½Π°Π±ΠΎΡ€Π΅ описываСт ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… запрос. НапримСр, ΠΊΠΎΠΌΠ°Π½Π΄Π°

EXPLAIN SELECT name,address,product_id,qty

FROM Customers, Orders

WHERE Customers.id=customer_id AND date=\'20007-12-12\

Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, прСдставлСнный Π² Ρ‚Π°Π±Π». 6.1. Π’Π°Π±Π»ΠΈΡ†Π° 6.1. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXPLAIN

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† table (Ρ‚Π°Π±Π»ΠΈΡ†Π°) содСрТит имя ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° столбСц select_type (Ρ‚ΠΈΠΏ запроса) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ мСсто ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² структурС запроса:

β€’ SIMPLE – простой запрос Π±Π΅Π· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… запросов ΠΈ UNION;

β€’ PRIMARY – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос Π² UNION ΠΈΠ»ΠΈ внСшний запрос, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ запросы;

β€’ UNION – Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы Π² объСдинСнии UNION;

β€’ DEPENDENT UNION – Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ запросы Π² объСдинСнии UNION, связанныС с внСшним запросом (ΠΎ связанных подзапросах Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ запроса»);

β€’ UNION RESULT – опСрация объСдинСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запросов;

β€’ SUBQUERY – Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запрос;

β€’ DEPENDENT SUBQUERY, UNCACHEABLE SUBQUERY – Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ запрос, связанный с внСшним запросом;

β€’ DERIVED – запрос, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (Ρ‚Π°ΠΊΠΎΠΉ запрос слСдуСт послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова FROM).

Π’ столбцС rows (строки) содСрТится ΠΎΡ†Π΅Π½ΠΊΠ° количСства строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ потрСбуСтся ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ для Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Если ваш запрос ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ структуру, значСния Π² столбцС rows ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Β«ΡƒΠ·ΠΊΠΈΠ΅ мСста».

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† possible_keys (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ индСксы) ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΈΠ· числа ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° MySQL ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса. Если этот столбСц содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, Π° Π²Ρ‹ считаСтС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ подходящиС индСксы (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ созданию индСксов Π±Ρ‹Π»ΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅).

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ индСкс сущСствуСт, Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° MySQL Π½Π΅ примСняСт Π΅Π³ΠΎ, считая ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ эффСктивнСС. ИндСкс, фактичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса, отобраТаСтся Π² столбцС key (индСкс); Ссли Π΄Π°Π½Π½Ρ‹ΠΉ столбСц содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° MySQL Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π»Π° Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· доступных индСксов. Если Π²Ρ‹, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, считаСтС, Ρ‡Ρ‚ΠΎ индСкс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

1. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ статистику распрСдСлСния индСксов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ANALYZE TABLE <Имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹>;

2. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ EXPLAIN. Если ΠΈ послС обновлСния статистики индСкс Π½Π΅ Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² тСкст запроса послС ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ FORCE INDEX (<Имя индСкса>). Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ врСмя выполнСния запроса с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ FORCE INDEX ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Помимо ввСдСния индСксов, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы ускорСния запросов. Π’ΠΎΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простыС ΠΈΠ· Π½ΠΈΡ….

β€’ Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ лишнСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹. НапримСр, Ссли Π²Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚Π΅ Π½Π° Π²Π΅Π±-страницС Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 20 Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Products (Π’ΠΎΠ²Π°Ρ€Ρ‹) всС Π΄Π°Π½Π½Ρ‹Π΅. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ запросы Π²ΠΈΠ΄Π°

SELECT <Бписок столбцов> FROM <Бписок Ρ‚Π°Π±Π»ΠΈΡ†>

[WHERE <УсловиС ΠΎΡ‚Π±ΠΎΡ€Π°>]

…

LIMIT <ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк> OFFSET <Π‘Π΄Π²ΠΈΠ³>;

Π’Π°ΠΊ, для получСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ Β«ΠΏΠΎΡ€Ρ†ΠΈΠΈΒ» ΠΈΠ· 20 Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ запрос

SELECT * FROM Products LIMIT 20 OFFSET 0;

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… 20 Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² β€”

SELECT * FROM Products LIMIT 20 OFFSET 20;

Π—Π°Ρ‚Π΅ΠΌ

SELECT * FROM Products LIMIT 20 OFFSET 40;

ΠΈ Ρ‚. Π΄.

β€’ ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ упроститС систСму ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ доступа. Π§Π΅ΠΌ слоТнСС систСма ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ, Ρ‚Π΅ΠΌ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² доступа ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запросов (Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… SQL-ΠΊΠΎΠΌΠ°Π½Π΄). Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ присвоСния ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ доступа ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈ столбцам. Π’ этом случаС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ обращСния ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ tables_priv ΠΈ columns_ priv (см. ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π» Β«ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉΒ»).

β€’ Π•сли запрос содСрТит Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ являСтся Π»ΠΈ вычислСниС этого выраТСния ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ замСдлСния запроса. Для этого Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

SELECT BENCHMARK(<ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ>,<Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>);

Ѐункция BENCHMARK() всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² сообщСнии ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ указываСтся врСмя Π΅Π΅ выполнСния, благодаря Ρ‡Π΅ΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ врСмя вычислСния выраТСния. НапримСр, Ссли ваш запрос Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ вычислСниС синуса для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

SELECT BENCHMARK(10000000,SIN(1));

ΠŸΡ€ΠΈ использовании процСссора с Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой 1,6 Π“Π“Ρ† Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 1 с. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° MySQL способна ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ 10 ΠΌΠ»Π½ вычислСний синуса Π² сСкунду, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, функция SIN() Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сущСствСнного влияния Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запроса. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ рассмотрСли способы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ запросов. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ быстродСйствиС сСрвСра ΠΏΡƒΡ‚Π΅ΠΌ настройки систСмных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….