Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ индСкс

БозданиС и использованиС индСксов

Π‘ Ρ†Π΅Π»ΡŒΡŽ ускорСния поиска ΠΈ сортировки Π΄Π°Π½Π½Ρ‹Ρ… Π² любой Π‘Π£Π‘Π” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ индСксы. ИндСкс являСтся срСдством, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обСспСчиваСт быстрый доступ ΠΊΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π° основС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов. ИндСкс прСдставляСт собой упорядочСнный список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылок Π½Π° Ρ‚Π΅ записи, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся эти значСния. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ записи, Π‘Π£Π‘Π” сначала ΠΈΡ‰Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² индСксС, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎ ссылкам быстро ΠΎΡ‚Π±ΠΈΡ€Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²: простыС ΠΈ составныС. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ индСксы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой индСксы, созданныС ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ столбцу. ИндСкс, построСнный ΠΏΠΎ нСскольким столбцам, называСтся составным. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ составного индСкса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ индСкс, построСнный ΠΏΠΎ столбцам «Π€Π°ΠΌΠΈΠ»ΠΈΡ» ΠΈ «Π˜ΠΌΡ».

Однако ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСксов приносит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСимущСства, Π½ΠΎ ΠΈ нСдостатки. Π“Π»Π°Π²Π½Ρ‹ΠΌ срСди Π½ΠΈΡ… являСтся Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ записСй ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² индСксном столбцС трСбуСтся ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ индСкс, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ большом количСствС индСксов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ индСксы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рСкомСндуСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… столбцов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто выполняСтся поиск записСй. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FoxPro) индСксы хранятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ Π·Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚. ΠΊ. ΠΏΡ€ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ индСкса поиск Π΄Π°Π½Π½Ρ‹Ρ… выполняСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π’ Microsoft Access индСксы хранятся Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Access. Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡŽΠ±Ρ‹Π΅ поля, ΠΊΡ€ΠΎΠΌΠ΅ ΠœΠ•ΠœΠž-ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π΅ΠΉ Ρ‚ΠΈΠΏΠ° ГипСрссылка ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² OLE.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой индСкс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ автоматичСски индСксируСтся ΠΈ свойству Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ (Indexed) присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π”Π° (БовпадСния Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ) (Yes (No duplicates)).

Боставной индСкс создаСтся Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ устанавливаСтся порядок сортировки По Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ (Ascending). Для сортировки Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ Π² ΠΏΠΎΠ»Π΅ ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ сортировки (Sort Order) Π² ΠΎΠΊΠ½Π΅ индСксов ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ По ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ (Descending).

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π˜Π½Π΄Π΅ΠΊΡΡ‹ (Indexes) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ для просмотра, измСнСния ΠΈ удалСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… индСксов. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ индСкса выполняСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ поля Π² ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ Ρ‚Π°Π±Π»ΠΈΡ†. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ строку с Π½ΡƒΠΆΠ½Ρ‹ΠΌ индСксом ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ контСкстным мСню.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСкс mysql ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

3 ΠΎΡ‚Π²Π΅Ρ‚Π° 3

Если Π² ΠΊΡ€Π°Ρ‚Ρ†Π΅, Ρ‚ΠΎ индСкс, это ΠΏΠΎΠ»Π΅ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½(ускорСн) поиск.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ индСкс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСсто, Ρ‚ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ происходит Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°.

Допустим Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π°.

Допустим Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ поиск ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ (firstname).

Ρ‚ΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ смысл Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ полю.

Π‘ΡƒΠ΄Π΅Ρ‚ созданна «ΠΊΠ°Ρ€Ρ‚Π°» которая ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ записи Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ спискС.

Для ΠΎΠ΄Π½ΠΎΠΉ нСбольшой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ приСмущСство Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ join нСсколько (3-4 ΡƒΠΆΠ΅ достаточно) Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠΎ нСиндСксированным полям. Π£Π±ΠΈΠ²Π°Π΅Ρ‚ сСрвСр Π½Π° Ρ€Π°Π·!

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅, индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ поиска Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС. Π‘Π΅Π· индСкса поиск Π½ΡƒΠΆΠ½Ρ‹Ρ… строк ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ порядку (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ), Ρ‡Ρ‚ΠΎ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ИндСкс создаётся ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ:

Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот запрос ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» быстрСС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ, слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс ΠΏΠΎ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ:

Π’ΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый запрос

ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ссли столбСц city Π±ΡƒΠ΄Π΅Ρ‚ проиндСксирован.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ индСкс. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ индСкс. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ индСкс. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ индСкс. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ индСкс

На ΠΏΠ°Π»ΡŒΡ†Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

Когда Π’Ρ‹ создаётС Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, добавляСтС Π² Π½Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° разрастаСтся ΠΈ ΠΎΠ½Π° выглядит ΠΊΠ°ΠΊ просто ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список, упорядочСнный ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ Π² Π½Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹Π΅ добавлялись.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π’Ρ‹ ΠΈΡ‰ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ запись, Ρ‚ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС записи, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄ΡƒΡ‚ Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ.

Когда Π’Π°ΠΌ это ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎΠ΅Π΄Π°Π΅Ρ‚ ΠΈ Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΊ Π’Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят индСксы.

ИндСкс создаётся ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ полю (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ нСскольким) ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, выполняСтся поиск. Когда Π’Ρ‹ создаётС индСкс, Ρ‚ΠΎ MySql (ΠΈ любая другая Π‘Π”) ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ всС записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ строит Π΄Π΅Ρ€Π΅Π²ΠΎ (скорСС всСго B-Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠ»ΠΈ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ выступаСт Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π° содСрТимым ссылки Π½Π° записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

И ΠΊΠΎΠ³Π΄Π° Π’Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ свой select запрос ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΠΎ полю для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ создали индСкс MySql (ΠΈ любая другая Π‘Π”) Π·Π½Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ индСкс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ быстрСС, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС записи ΠΈ Π’Π°Ρˆ запрос Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ этому индСксу ΠΈ записи, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ поиск ΠΏΠΎ построСнному Π΄Π΅Ρ€Π΅Π²Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Π½Π΅ΠΆΠ΅Π»ΠΈ простой ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх записСй.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ использованиС индСкса для увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Если Π²Ρ‹ часто Π²Π΅Π΄Π΅Ρ‚Π΅ поиск Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Access ΠΈΠ»ΠΈ сортировали Π΅Π΅ записи ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ полю, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, создав для этого поля индСкс. Access ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ индСксы Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΡ€ΠΈ использовании индСкса Π² ΠΊΠ½ΠΈΠ³Π΅: Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Access ΠΈΡ‰Π΅Ρ‚ располоТСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксС. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² случаС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Access автоматичСски создаСт индСкс. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях индСкс ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ даСтся описаниС индСксов; рассматриваСтся, ΠΊΠ°ΠΊΠΈΠ΅ поля слСдуСт ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ; описываСтся созданиС, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСксов. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Access создаСт индСксы автоматичСски.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, описанныС Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания индСкса для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²Π΅Π±-Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Π±-Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… зависит ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сСрвСра SharePoint, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСкс?

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ поиск ΠΈ сортировку записСй Π² Access. Π’ индСксС хранится мСстополоТСниС записСй Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ для индСксирования. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Access ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ свСдСния ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² индСксС, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡƒΡ‚Π΅ΠΌ пСрСмСщСния нСпосрСдствСнно ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Благодаря этому использованиС индСкса Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС просмотра всСх записСй для поиска Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ для индСксирования

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы, основанныС Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… полях. Π’ основном трСбуСтся ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… часто осущСствляСтся поиск, сортируСмыС поля ΠΈ поля, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ с полями Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Ρ‡Ρ‚ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² запросах ΠΏΠΎ нСскольким Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ. Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ поиск ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запросов, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ добавляСтС ΠΈΠ»ΠΈ измСняСтС запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, содСрТащСй ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько индСксов, Access приходится ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ индСксы. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ записСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запроса Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ импортирования записСй Ρ‚Π°ΠΊΠΆΠ΅, скорСС всСго, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ссли Ρ‚Π°Π±Π»ΠΈΡ†Π°-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ содСрТит индСксы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ индСксируСтся автоматичСски.

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… «ΠžΠ±ΡŠΠ΅ΠΊΡ‚ OLE», «Π’ычисляСмый» ΠΈΠ»ΠΈ «Π’Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅» Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ поля слСдуСт Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ условия.

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… поля: «ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ тСкст» («Π’Скст» Π² Access 2010), «Π”Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст» («ΠŸΠΎΠ»Π΅ ΠœΠ•ΠœΠž» Π² Access 2010), «Π§ΠΈΡΠ»ΠΎ», «Π”Π°Ρ‚Π°/врСмя», «ΠΠ²Ρ‚ΠΎΠ½ΡƒΠΌ», «Π’Π°Π»ΡŽΡ‚Π°», «Π”Π°/НСт» ΠΈΠ»ΠΈ «Π“ипСрссылка».

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ поиск Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ сортировка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ сохранСниС большого числа Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅. Если ΠΏΠΎΠ»Π΅ содСрТит ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСкса ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ускорСния выполнСния запросов.

БоставныС индСксы

Если прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ часто Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск ΠΈΠ»ΠΈ сортировку ΠΏΠΎ нСскольким полям, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс для этого сочСтания ΠΏΠΎΠ»Π΅ΠΉ. НапримСр, Ссли Π² ΠΎΠ΄Π½ΠΎΠΌ запросС часто Π·Π°Π΄Π°ΡŽΡ‚ΡΡ условия для ΠΏΠΎΠ»Π΅ΠΉ «ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ» ΠΈ «ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅_ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°», ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для этих ΠΏΠΎΠ»Π΅ΠΉ составной индСкс.

ΠŸΡ€ΠΈ сортировкС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎ составному индСксу Access сначала выполняСт сортировку ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ полю, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ для индСкса. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ опрСдСляСтся ΠΏΡ€ΠΈ создании составного индСкса. Если Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠ»Π΅ содСрТатся записи с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ значСниями, Π·Π°Ρ‚Π΅ΠΌ выполняСтся сортировка ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ полю, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ для индСкса, ΠΈ Ρ‚. Π΄.

Π’ составной индСкс ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎ 10 ΠΏΠΎΠ»Π΅ΠΉ.

БозданиС индСкса

ΠŸΠ΅Ρ€Π΅Π΄ созданиСм индСкса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, слСдуСт Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс для ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля ΠΈΠ»ΠΈ составной индСкс. ИндСкс для ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ установки свойства Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ свойства Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ свойства «Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅»

НС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСкс для этого поля (ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ индСкс)

Π”Π° (Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ совпадСния)

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс для этого поля

Π”Π° (совпадСния Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ)

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс для этого поля

ΠŸΡ€ΠΈ создании ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅, Ссли Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ сущСствуСт Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΠ»Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ записи. Access автоматичСски создаСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс для ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ созданиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… полях. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс для поля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся сСрийныС Π½ΠΎΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ нСльзя Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ сСрийный Π½ΠΎΠΌΠ΅Ρ€.

БозданиС индСкса для одного поля

Π’ области Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² контСкстном мСню ΠΏΡƒΠ½ΠΊΡ‚ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ Имя поля для поля, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слСдуСт ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Бвойства поля ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ΠžΠ±Ρ‰ΠΈΠ΅.

Π’ свойствС Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π”Π° (Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ совпадСния), Ссли слСдуСт Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния, ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π”Π° (совпадСния Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ элСмСнт Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ быстрого доступа ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ клавиши CTRL+S.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ составного индСкса

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ строку для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля Π² индСксС ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ имя индСкса Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС. ВсС строки Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ индСкса, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° строка с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ индСкса. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строку, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ мСсто, ΠΊΡƒΠ΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² контСкстном мСню ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строки.

Π’ области Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² контСкстном мСню ΠΏΡƒΠ½ΠΊΡ‚ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€.

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ Π˜Π½Π΄Π΅ΠΊΡΡ‹.

ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ «Π˜Π½Π΄Π΅ΠΊΡΡ‹». Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ этого ΠΎΠΊΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ пустыС строки ΠΈ свойства индСкса.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ пустой строкС столбца ИндСкс Π²Π²Π΅Π΄ΠΈΡ‚Π΅ имя индСкса. Для индСкса ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ имя ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· индСксируСмых ΠΏΠΎΠ»Π΅ΠΉ, Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ подходящСС имя.

Π’ столбцС Имя поля Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ стрСлку, Π·Π°Ρ‚Π΅ΠΌ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² индСксС.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку столбца ИндСкс ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ пустой, Π·Π°Ρ‚Π΅ΠΌ Π² столбцС Имя поля ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ индСксируСмоС ΠΏΠΎΠ»Π΅. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ этот шаг для всСх ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² индСкс.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок сортировки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ, Π² столбцС ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ сортировки ΠΎΠΊΠ½Π° «Π˜Π½Π΄Π΅ΠΊΡΡ‹» Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ По Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ По ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выполняСтся сортировка ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Бвойства индСкса ΠΎΠΊΠ½Π° Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ свойства индСкса для строки Π² столбцС Имя индСкса, содСрТащСм имя индСкса. Π—Π°Π΄Π°ΠΉΡ‚Π΅ свойства Π² соотвСтствии с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π½ΠΈΠΆΠ΅.

Если Π”Π°, Ρ‚ΠΎ индСкс являСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

Если Π”Π°, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ индСксируСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ пустых ΠΏΠΎΠ»Π΅ΠΉ

Если Π”Π°, Ρ‚ΠΎ записи с пустыми значСниями Π² индСксируСмых полях Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ· индСкса.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ быстрого доступа ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ клавиши CTRL+S.

Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ «Π˜Π½Π΄Π΅ΠΊΡΡ‹».

УдалСниС индСкса

Если индСкс становится Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΈ этом удаляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам индСкс, Π° Π½Π΅ поля, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ основан.

Π’ области Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ индСкс, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² контСкстном мСню ΠΏΡƒΠ½ΠΊΡ‚ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€.

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ Π˜Π½Π΄Π΅ΠΊΡΡ‹.

ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ «Π˜Π½Π΄Π΅ΠΊΡΡ‹». Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ этого ΠΎΠΊΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ пустыС строки ΠΈ свойства индСкса.

Π’ ΠΎΠΊΠ½Π΅ «Π˜Π½Π΄Π΅ΠΊΡΡ‹» Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ строки, содСрТащиС индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ DELETE.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ быстрого доступа ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ клавиши CTRL+S.

Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ Π˜Π½Π΄Π΅ΠΊΡΡ‹

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ индСксов

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

Π’ области Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, индСкс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² контСкстном мСню ΠΏΡƒΠ½ΠΊΡ‚ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€.

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ Π˜Π½Π΄Π΅ΠΊΡΡ‹.

ΠŸΠΎΡΠ²ΠΈΡ‚ΡΡ ΠΎΠΊΠ½ΠΎ «Π˜Π½Π΄Π΅ΠΊΡΡ‹». Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ этого ΠΎΠΊΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ пустыС строки ΠΈ свойства индСкса.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ индСксы ΠΈ свойства индСксов Π² соотвСтствии со своими Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ быстрого доступа ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ клавиши CTRL+S.

Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ Π˜Π½Π΄Π΅ΠΊΡΡ‹

АвтоматичСскоС созданиС индСксов

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски. НапримСр, индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Для автоматичСского создания индСкса Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ АвтоиндСкс ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ΠΈ создании Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Access. Access автоматичСски проиндСксируСт всС поля, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ»Π΅ АвтоиндСкс ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ΠΈ создании Π·Π½Π°ΠΊΠΎΠ² ΠΈΠ»ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ID, ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ число. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, сдСлайтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π€Π°ΠΉΠ» > ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ† Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ значСния Π² ΠΏΠΎΠ»Π΅ АвтоиндСкс ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ΠΈ создании. Для раздСлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой ( ;).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если имя поля начинаСтся со значСния, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² спискС, ΠΈΠ»ΠΈ заканчиваСтся ΠΈΠΌ, ΠΏΠΎΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски проиндСксировано.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… сниТаСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рСкомСндуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΠ»Π΅ АвтоиндСкс ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ΠΈ создании ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΈΡ… число, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство создаваСмых индСксов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² PostgreSQL β€” 1

Π’ этой сСрии статСй Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ± индСксах Π² PostgreSQL.

Π›ΡŽΠ±ΠΎΠΉ вопрос ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ с Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ зрСния. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π‘Π£Π‘Π”: ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² PostgreSQL ΠΈΡ… Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ…, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ускорСния запросов. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, Ρ‚Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ мСньшим числом слов, Π½ΠΎ ΠΌΡ‹ Π²Ρ‚Π°ΠΉΠ½Π΅ надССмся Π½Π° Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ интСрСсны ΠΈ подробности Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… подробностСй позволяСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‡ΡƒΠΆΠΎΠΌΡƒ мнСнию, Π½ΠΎ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ собствСнныС Π²Ρ‹Π²ΠΎΠ΄Ρ‹.

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

Π’ этой части ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сфСр отвСтствСнности ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ индСксирования, относящимся ΠΊ ядру Π‘Π£Π‘Π”, ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ индСксного доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² PostgreSQL ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΌΡ‹ рассмотрим интСрфСйс ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ понятия, ΠΊΠ°ΠΊ классы ΠΈ сСмСйства ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ПослС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ввСдСния ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим устройство ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² индСксов: Hash, B-tree, GiST, SP-GiST, GIN ΠΈ RUM, BRIN ΠΈ Bloom.

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅Ρ€ΡΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ:

Π˜Π½Π΄Π΅ΠΊΡΡ‹

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² PostgreSQL β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π² основном для ускорСния доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ структуры: любой индСкс ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Иногда приходится ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π‘Π£Π‘Π” ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π±Π΅Π· индСксов, просто ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Однако это Π½Π΅ Ρ‚Π°ΠΊ, вСдь индСксы слуТат Ρ‚Π°ΠΊΠΆΠ΅ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ цСлостности.

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

НСсмотря Π½Π° всС различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ индСксов (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ доступа), Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС любой ΠΈΠ· Π½ΠΈΡ… устанавливаСт соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ проиндСксированного столбца) ΠΈ строками Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… этот ΠΊΠ»ΡŽΡ‡ встрСчаСтся. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TID (tuple id), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π½ΠΎΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ строки Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°. Π’ΠΎΠ³Π΄Π°, зная ΠΊΠ»ΡŽΡ‡ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ быстро ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅ строки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π°Ρ нас информация, Π½Π΅ просматривая всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСкс, ускоряя доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Π²Π·Π°ΠΌΠ΅Π½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° своС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅. ΠŸΡ€ΠΈ любой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ проиндСксированными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ β€” Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ вставка, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, β€” индСксы, созданныС для этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ пСрСстроСны, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ создавались индСксы, Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ индСксов; этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ называСтся HOT (Heap-Only Tuples).

Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдствия. Π§Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² систСму, Π² PostgreSQL Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования. Π•Π³ΠΎ основной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ являСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ TID ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ:

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ доступа Π½ΡƒΠΆΠ½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ. ΠŸΡ€ΠΈ создании индСкса систСмС Π½Π°Π΄ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ: ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ индСкс Π½Π°Π΄ нСсколькими столбцами? ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ индСкс ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ?

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎ сСбС всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π”ΠΎ вСрсии 9.6 для этого использовалась Ρ‚Π°Π±Π»ΠΈΡ†Π° pg_am, Π° начиная с 9.6 Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΡ‡Π΅Π²Π°Π»ΠΈ Π³Π»ΡƒΠ±ΠΆΠ΅, Π²Π½ΡƒΡ‚Ρ€ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘ этим интСрфСйсом ΠΌΡ‹ познакомимся Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π’ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΆΠ΅ самого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа Π²Ρ…ΠΎΠ΄ΠΈΡ‚ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅:

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования позволяСт PostgreSQL ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с самыми Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ доступа, учитывая ΠΈΡ… возмоТности.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ способы сканирования

ИндСксноС сканированиС

МоТно ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с TID, поставляСмыми индСксом. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

postgres=# create table t(a integer, b text, c boolean);
CREATE TABLE
postgres=# insert into t(a,b,c)
select s.id, chr((32+random()*94)::integer), random()
ΠœΡ‹ создали Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с трСмя полями. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ содСрТит числа ΠΎΡ‚ 1 Π΄ΠΎ 100000, ΠΈ ΠΏΠΎ Π½Π΅ΠΌΡƒ создан индСкс (ΠΏΠΎΠΊΠ° Π½Π°ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ). Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»Π΅ содСрТит Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ASCII-символы, ΠΊΡ€ΠΎΠΌΠ΅ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ…. НаконСц, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΏΠΎΠ»Π΅ содСрТит логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, истинноС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ для 1% строк, ΠΈ Π»ΠΎΠΆΠ½ΠΎΠ΅ для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ вставлСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² случайном порядкС.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Β«a = 1Β». Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ условиС ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ «индСксированноС-ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β», Π³Π΄Π΅ Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Β«Ρ€Π°Π²Π½ΠΎΒ», Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (ΠΊΠ»ΡŽΡ‡ΠΎΠΌ поиска) являСтся Β«1Β». Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв условиС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ индСкс ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

postgres=# explain (costs off) select * from t where a = 1;
QUERY PLAN
——————————-
Index Scan using t_a_idx on t
Index Cond: (a = 1)
(2 rows)

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ принял Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксноС сканированиС (Index Scan). ΠŸΡ€ΠΈ индСксном просмотрС ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния TID ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° подходящиС строки Π½Π΅ закончатся. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ обращаСтся ΠΊ Ρ‚Π΅ΠΌ страницам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ TID, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ строки, провСряСт Π΅Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ многовСрсионности, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅

ИндСксноС сканированиС Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ всСго ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… значСниях. Однако ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‚ ΡˆΠ°Π½ΡΡ‹, Ρ‡Ρ‚ΠΎ придСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΉ страницС нСсколько Ρ€Π°Π·. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° сканированиС ΠΏΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅ (bitmap scan):

postgres=# explain (costs off) select * from t where a Bitmap Index Scan on t_a_idx
Index Cond: (a
Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС TID, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ (ΡƒΠ·Π΅Π» Bitmap Index Scan), ΠΈ ΠΏΠΎ Π½ΠΈΠΌ строится битовая ΠΊΠ°Ρ€Ρ‚Π° вСрсий строк. Π—Π°Ρ‚Π΅ΠΌ вСрсии строк Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Bitmap Heap Scan) β€” ΠΏΡ€ΠΈ этом каТдая страница Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ шагС условиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ (Recheck Cond). Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слишком Π²Π΅Π»ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ битовая ΠΊΠ°Ρ€Ρ‚Π° вСрсий строк ΠΌΠΎΠ³Π»Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ work_mem). Π’ этом случаС строится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ битовая ΠΊΠ°Ρ€Ρ‚Π° страниц, содСрТащих хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ строки. Вакая «грубая» ΠΊΠ°Ρ€Ρ‚Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСньшС мСста, Π½ΠΎ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ страницы приходится ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ условия для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ хранящСйся Ρ‚Π°ΠΌ строки. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Π² случаС нСбольшой Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ (ΠΊΠ°ΠΊ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) шаг Β«Recheck CondΒ» всС Ρ€Π°Π²Π½ΠΎ отобраТаСтся Π² ΠΏΠ»Π°Π½Π΅, хотя Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ выполняСтся.

Если условия Π½Π°Π»ΠΎΠΆΠ΅Π½Ρ‹ Π½Π° нСсколько ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈ эти поля проиндСксированы, сканированиС Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ позволяСт (Ссли ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ сочтСт это Π²Ρ‹Π³ΠΎΠ΄Π½Ρ‹ΠΌ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько индСксов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ индСкса строятся Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ вСрсий строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ логичСски ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‚ΡΡ (Ссли выраТСния соСдинСны условиСм AND), Π»ΠΈΠ±ΠΎ логичСски ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ (Ссли выраТСния соСдинСны условиСм OR). НапримСр:

postgres=# create index on t(b);
CREATE INDEX
postgres=# analyze t;
ANALYZE
postgres=# explain (costs off) select * from t where a BitmapAnd
-> Bitmap Index Scan on t_a_idx
Index Cond: (a Bitmap Index Scan on t_b_idx
Index Cond: (b = ‘a’::text)
(7 rows)

Π—Π΄Π΅ΡΡŒ ΡƒΠ·Π΅Π» BitmapAnd ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΄Π²Π΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«ΠΈΒ».

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

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сканированиС

Для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ слСдуСт ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ нСсСлСктивном условии ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚ использованию индСкса ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ:

postgres=# explain (costs off) select * from t where a
И Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π². Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ индСксы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ условия, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Π΅ΠΌ мСньшС строк Π΅ΠΌΡƒ удовлСтворяСт. ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‚ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ страниц индСкса.

Битуация усугубляСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ выполняСтся быстрСС, Ρ‡Π΅ΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ страниц Β«Π²Ρ€Π°Π·Π½ΠΎΠ±ΠΎΠΉΒ». Π­Ρ‚ΠΎ особСнно Π²Π΅Ρ€Π½ΠΎ для ТСстких дисков, Π³Π΄Π΅ мСханичСская опСрация подвСдСния Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΊ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ сущСствСнно большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ само Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…; Π² случаС дисков SSD этот эффСкт ΠΌΠ΅Π½Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½. Для ΡƒΡ‡Π΅Ρ‚Π° Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ стоимости доступа ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° seq_page_cost ΠΈ random_page_cost, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ глобально, Π½ΠΎ ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… пространств, учитывая Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ характСристики Ρ€Π°Π·Π½Ρ‹Ρ… дисковых подсистСм.

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, основная Π·Π°Π΄Π°Ρ‡Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа β€” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ подходящих строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования ΠΌΠΎΠ³ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Но Ρ‡Ρ‚ΠΎ, Ссли индСкс ΡƒΠΆΠ΅ содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для запроса Π΄Π°Π½Π½Ρ‹Π΅? Π’Π°ΠΊΠΎΠΉ индСкс называСтся ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ (covering), ΠΈ Π² этом случаС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ индСксноС сканированиС (Index Only Scan):

postgres=# vacuum t;
VACUUM
postgres=# explain (costs off) select a from t where a
НазваниС ΠΌΠΎΠΆΠ΅Ρ‚ навСсти Π½Π° ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования совсСм Π½Π΅ обращаСтся ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, получая всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа. Но это Π½Π΅ совсСм Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ индСксы Π² PostgreSQL Π½Π΅ содСрТат ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΎ видимости строк. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС вСрсии строк, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ условиС поиска, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΈΠ΄Π½Ρ‹ ΠΎΠ½ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Однако Ссли Π±Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ индСксирования ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для опрСдСлСния видимости, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ сканирования Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличался Π±Ρ‹ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ индСксного сканирования.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ PostgreSQL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ для Ρ‚Π°Π±Π»ΠΈΡ† Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ процСсс очистки (vacuum) ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ страницы, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ мСнялись достаточно Π΄Π°Π²Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π²ΠΈΠ΄Π΅Π»ΠΈ всС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, нСзависимо ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π°Π»Π° ΠΈ уровня изоляции. Если ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ строки, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠΉ индСксом, относится ΠΊ Ρ‚Π°ΠΊΠΎΠΉ страницС, Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рСгулярноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ очистки ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… индСксов. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ число Π½Π΅ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… строк ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ использования ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ индСксного сканирования, Ссли спрогнозируСт большиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ видимости.

Число Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ explain analyze:

postgres=# explain (analyze, costs off) select a from t where a
Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ понадобилось (Heap Fetches: 0), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° очистка. Π’ΠΎΠΎΠ±Ρ‰Π΅, Ρ‡Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ это число ΠΊ Π½ΡƒΠ»ΡŽ, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅.

НС всС индСксы хранят вмСстС с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ строк сами проиндСксированныС значСния. Если ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ индСксного сканирования.

НСопрСдСлСнныС значСния ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² рСляционных Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ прСдставлСния Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ сущСствуСт ΠΈΠ»ΠΈ Π½Π΅ извСстно.

Но особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈ особого ΠΊ сСбС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ Π±ΡƒΠ»Π΅Π²Π° Π»ΠΎΠ³ΠΈΠΊΠ° прСвращаСтся Π² Ρ‚Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½ΡƒΡŽ; нСпонятно, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ большС (ΠΎΡ‚ΡΡŽΠ΄Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции для сортировки NULLS FIRST ΠΈ NULLS LAST); Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π°Π΄ΠΎ Π»ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния Π² Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… функциях ΠΈΠ»ΠΈ Π½Π΅Ρ‚; трСбуСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ статистика для планировщика…

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния индСксной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями Ρ‚ΠΎΠΆΠ΅ имССтся Π½Π΅ΡΡΠ½ΠΎΡΡ‚ΡŒ: Π½Π°Π΄ΠΎ Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ значСния ΠΈΠ»ΠΈ Π½Π΅Ρ‚? Если Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ null, Ρ‚ΠΎ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅. Π—Π°Ρ‚ΠΎ Ссли ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс для условий Π²ΠΈΠ΄Π° «индСксированноС-ΠΏΠΎΠ»Π΅ IS [NOT] NULLΒ», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² качСствС ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ индСкса ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ отсутствии условий Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС индСкс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ всСх строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² Ρ‚ΠΎΠΌ числС ΠΈ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями).

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ своС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Но, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ΠΈ всС-Ρ‚Π°ΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ нСскольким полям

Условия Π½Π° нСсколько ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹Ρ… индСксов. НапримСр, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΏΠΎ Π΄Π²ΡƒΠΌ полям нашСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

postgres=# create index on t(a,b);
CREATE INDEX
postgres=# analyze t;
ANALYZE

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ скорСС всСго ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ индСкс объСдинСнию Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь ΠΌΡ‹ сразу ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ TID Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий:

postgres=# explain (costs off) select * from t where a
ΠœΠ½ΠΎΠ³ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΉ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ для ускорСния Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Π½Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ β€” начиная с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ:

postgres=# explain (costs off) select * from t where a Bitmap Index Scan on t_a_b_idx
Index Cond: (a
Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ссли Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π½Π΅ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΎ условиС, индСкс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Но Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это всС-Ρ‚Π°ΠΊΠΈ Π²Ρ‹Π³ΠΎΠ΄Π½Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сканирования. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΡ‹ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ эту Ρ‚Π΅ΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ индСксы btree.

НС всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ созданиС индСксов ΠΏΠΎ нСскольким столбцам.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ выраТСниям

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ условиС поиска Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ «индСксированноС-ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β». Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅, индСкс Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ вмСсто самого ΠΈΠΌΠ΅Π½ΠΈ поля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π½ΠΈΠΌ:

postgres=# explain (costs off) select * from t where lower(b) = ‘a’;
QUERY PLAN
——————————————
Seq Scan on t
Filter: (lower((b)::text) = ‘a’::text)
(2 rows)

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ запрос Π½Π΅ составляСт Ρ‚Ρ€ΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ слСва ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° стояло Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя поля. Но Ссли это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят индСксы ΠΏΠΎ выраТСниям (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ индСксы):

postgres=# create index on t(lower(b));
CREATE INDEX
postgres=# analyze t;
ANALYZE
postgres=# explain (costs off) select * from t where lower(b) = ‘a’;
QUERY PLAN
—————————————————-
Bitmap Heap Scan on t
Recheck Cond: (lower((b)::text) = ‘a’::text)
-> Bitmap Index Scan on t_lower_idx
Index Cond: (lower((b)::text) = ‘a’::text)
(4 rows)

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс создаСтся Π½Π΅ ΠΏΠΎ полю Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ; ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ индСкс для условий Π²ΠΈΠ΄Π° «индСксированноС-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β». Если вычислСниС индСксируСмого выраТСния β€” затратная опСрация, Ρ‚ΠΎ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ индСкса Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов.

Π‘Ρ‚ΠΎΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ индСксированному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ собираСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ статистика. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² прСдставлСнии pg_stats ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ индСкса:

postgres=# \d t
Table «public.t»
Column | Type | Modifiers
———+———+————
a | integer |
b | text |
c | boolean |
Indexes:
«t_a_b_idx» btree (a, b)
«t_a_idx» btree (a)
«t_b_idx» btree (b)
«t_lower_idx» btree (lower(b))

postgres=# select * from pg_stats where tablename = ‘t_lower_idx’;
.

Если это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ числом ΠΊΠΎΡ€Π·ΠΈΠ½ гистограмм Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (учитывая ΠΏΡ€ΠΈ этом, Ρ‡Ρ‚ΠΎ имя столбца ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ Π² зависимости ΠΎΡ‚ индСксированного выраТСния):

postgres=# \d t_lower_idx
Index «public.t_lower_idx»
Column | Type | Definition
———+——+————
lower | text | lower(b)
btree, for table «public.t»

postgres=# alter index t_lower_idx alter column «lower» set statistics 69;
ALTER INDEX

ЧастичныС индСксы

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это связано с сильной Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ распрСдСлСния: Ρ€Π΅Π΄ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ индСксу, Π½ΠΎ частоС ΠΏΡ€ΠΎΡ‰Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΌ сканированиСм Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

РазумССтся, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ индСкс ΠΏΠΎ столбцу Β«cΒ», ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ:

postgres=# create index on t(c);
CREATE INDEX
postgres=# analyze t;
ANALYZE
postgres=# explain (costs off) select * from t where c;
QUERY PLAN
——————————-
Index Scan using t_c_idx on t
Index Cond: (c = true)
Filter: c
(3 rows)

postgres=# explain (costs off) select * from t where not c;
QUERY PLAN
——————-
Seq Scan on t
Filter: (NOT c)
(2 rows)

ΠŸΡ€ΠΈ этом индСкс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 276 страниц:

postgres=# select relpages from pg_class where relname=’t_c_idx’;
relpages
———-
276
(1 row)

Но, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ столбСц Β«cΒ» ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° строк, 99% индСкса просто Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ частичный индСкс:

postgres=# create index on t(c) where c;
CREATE INDEX
postgres=# analyze t;
ANALYZE

Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ индСкса ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ Π΄ΠΎ 5 страниц:

postgres=# select relpages from pg_class where relname=’t_c_idx1′;
relpages
———-
5
(1 row)

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Ρ€Π°Π·Π½ΠΈΡ†Π° Π² объСмС ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма сущСствСнной.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°

Если ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ строк Π² порядкС сортировки, это Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ выполнСния запроса.

МоТно ΠΏΡ€ΠΎΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅:

postgres=# set enable_indexscan=off;
SET
postgres=# explain (costs off) select * from t order by a;
QUERY PLAN
———————
Sort
Sort Key: a
-> Seq Scan on t
(3 rows)

А ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСкса сразу Π² порядкС сортировки:

postgres=# set enable_indexscan=on;
SET
postgres=# explain (costs off) select * from t order by a;
QUERY PLAN
——————————-
Index Scan using t_a_idx on t
(1 row)

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

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ построСниС

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ построСниС индСкса Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚ΠΈΠΏΠ° SHARE Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Вакая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° позволяСт Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ измСнСния, ΠΏΠΎΠΊΠ° строится индСкс.

Π’ этом ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ссли Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания индСкса, скаТСм, Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ t, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ сСансС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос:

postgres=# select mode, granted from pg_locks where relation = ‘t’::regclass;
mode | granted
————+———
ShareLock | t
(1 row)

Если Ρ‚Π°Π±Π»ΠΈΡ†Π° достаточно большая ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ вставки, обновлСния ΠΈΠ»ΠΈ удалСния, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСдопустимым β€” ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ сСансы Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ освобоТдСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя.

Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ созданиСм индСкса:

postgres=# create index concurrently on t(a);
CREATE INDEX

Вакая ΠΊΠΎΠΌΠ°Π½Π΄Π° устанавливаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚ΠΈΠΏΠ° SHARE UPDATE EXCLUSIVE, которая Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… (запрСщаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ структуры Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ очистки, Π°Π½Π°Π»ΠΈΠ·Π°, ΠΈΠ»ΠΈ построСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ индСкса Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Π΅).

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

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ построСнии индСкса ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ограничСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ИндСкс Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ создаСтся, Π½ΠΎ Π² Β«Π½Π΅Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΒ» состоянии; Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π·. НСрабочиС индСксы ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ словом INVALID Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ psql \d, Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ запросом:

postgres=# select indexrelid::regclass index_name, indrelid::regclass table_name from pg_index where not indisvalid;
index_name | table_name
————+————
t_a_idx | t
(1 row)

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *