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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/FireBird/YaffilΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 97

Автор А Ковязин

Π’ зависимости ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСцСлСсообразной. Наибольший эффСкт достигаСтся ΠΏΡ€ΠΈ сТатии "хвостов" ΠΈΠ· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… тСкстовых строк (Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… CHAR ΠΈ VARCHAR), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ нСтСкстовыС Π΄Π°Π½Π½Ρ‹Π΅ практичСски нСсТимаСмы.

Для управлСния сТатиСм Π² Yaffil Π²Π²Π΅Π΄Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ SQZ_BLOCK. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Π² Π±Π°ΠΉΡ‚Π°Ρ…), начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ сТатиС. Π‘Π»ΠΎΠΊΠΈ строки Ρ‚Π°Π±Π»ΠΈΡ† ΠΌΠ΅Π½Π΅Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° хранятся Π² исходном Π²ΠΈΠ΄Π΅. Π‘ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° объСм Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… возрастаСт Π·Π° счСт сокращСния Π·Π°Ρ‚Ρ€Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ процСссора Π½Π° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства Π΄Π°Π½Π½Ρ‹Ρ… большС Π½Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄ΠΈΡΠΊΠΎΠ²ΡƒΡŽ подсистСму. Π’ зависимости ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… (Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ количСства тСкстовых ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…) ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² процСссора ΠΈ дисков систСмы сущСствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SQZ_BLOCK, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Алгоритм ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² Yaffil, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатого Π±Π»ΠΎΠΊΠ° Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ машинного слова.

УскорСнная Ρ€Π°Π±ΠΎΡ‚Π° с индСксами

Π“ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поиска ΠΏΠΎ индСксам (часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² соСдинСниях), Π° Ρ‚Π°ΠΊΠΆΠ΅ построСния индСксов. Π­Ρ‚ΠΎ достигнуто Π·Π° счСт Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° индСксирования.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ стратСгия вычислСния ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° IN ΠΈ условий, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ OR

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с InterBase ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠ»ΠΎΠ½Π°ΠΌΠΈ, Yaffil выполняСт ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ IN Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивно. ΠŸΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ построСниС Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ для индСкса, нСзависимо ΠΎΡ‚ числа ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΠΎΠ½Π°Ρ… InterBase ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ большом числС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², (особСнно Ссли IN Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ основной объСм Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ), нСсмотря Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½ исполнСния запроса. Π’ΠΎ ΠΆΠ΅ самоС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ для условия Π²ΠΈΠ΄Π° OR:

select * from Π’ where Fl = .. or F2 = ... or F2

УскорСнноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

Наибольший Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² скорости ΠΏΡ€ΠΈ использовании Yaffil Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, связанныС с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ "грязных страниц" Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠ³ΠΎ кэша, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ устранСно Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ массивных обновлСниях Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π›ΠΈΠΊΠ²ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° InterBase, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Π½ΠΈΠ΅ числа Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² большС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π° (ΠΎΠΊΠΎΠ»ΠΎ 10 000) ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ скорости, Π° совсСм Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π°ΠΆΠ΅ зависания (извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° "10 000 Π±ΡƒΡ„Π΅Ρ€ΠΎΠ²").

УстранСна дСградация скорости ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ большого числа рядов Π΄Π°Π½Π½Ρ‹Ρ…, Π° 1аюкС ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Π΅ большого числа ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. БыстрСС выполняСтся массовая вставка Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ Π·Π° счСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

УмСньшСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования ΠΈ восстановлСния

Π’ InterBase отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования, ΠΏΡ€ΠΈ этом сам процСсс backup/restore ΠΈΠ·-Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… особСнностСй ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с сСрвСрами Π‘Π£Π‘Π”, Π³Π΄Π΅ запись ΠΊΠΎΠΏΠΈΠΈ происходит постранично. Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ большой Π±Π°Π·Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ нСсколько часов, ΠΏΡ€ΠΈ этом Ρ…ΠΎΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½ΠΎ врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ΡΡ.

На Yaffil Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ восстановлСниС происходит Π² нСсколько Ρ€Π°Π· быстрСС, особСнно Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ это Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (отсутствуСт дСградация скорости копирования со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ).

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

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ выраТСниям (Expression Indexes) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎ- |Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ быстрый поиск ΠΈΠ»ΠΈ сортировку ΠΏΠΎ значСниям, вычисляСмым Π½Π° основС ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. НСобходимый индСкс опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]

INDEX index ON table COMPUTED BY (expression)

Π³Π΄Π΅ index - имя индСкса, expression - Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, построСнноС Π½Π° основС ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ UDF. Π’ΠΎ врСмя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов, Ссли Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ совпадаСт с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² условии WHERE ΠΈΠ»ΠΈ Π² условии соСдинСния, Π±ΡƒΠ΄Π΅Ρ‚ использован индСкс.

НапримСр, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ записСй, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Ρ‚Π°, для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ мСсяца ΠΏΠΎ всСм Π³ΠΎΠ΄Π°ΠΌ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Employee ΠΈΠ· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° поставки InterBase 6):

CREATE INDEX employeejhire_date_month_idx ON employee COMPUTED

BY (EXTRACT(MONTH FROM hire_date) ) ;

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос ΠΈ посмотрим Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ»Π°Π½:

SELECT * FROM employee

WHERE EXTRACT(MONTH FROM hire_date) = 1

PLAN (EMPLOYEE INDEX (EMPLOYEE_HIRE_DATE_MONTH_IDX))

ВычисляСмоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ значСниями ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, индСкс Π½Π° основС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CURRENT_TiMESTAMP, скорСС всСго, Π±ΡƒΠ΄Π΅Ρ‚ бСсполСзСн, хотя Yaffil Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ использованиС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ вычисляСмых выраТСниях нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подзапросы. ΠžΡ‡Π΅Π½ΡŒ интСрСсныС возмоТности ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ использовании User-Defined Functions (UDF) Π² вычисляСмых выраТСниях, с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эффСктивный поиск ΠΏΠΎ практичСски Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ.

УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ индСксами

Π˜Π½Π΄Π΅ΠΊΡΡ‹, построСнныС ΠΏΠΎ тСкстовым полям с Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ порядком сортировки, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π² срСднСм Π½Π° ΠΎΠ΄Π½Ρƒ Ρ‚Ρ€Π΅Ρ‚ΡŒ мСньшС мСста Π½Π° дискС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Interbase.

ВыраТСния Π² значСниях ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π΄ΠΎΠΌΠ΅Π½ΠΎΠ²

Yaffil позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слоТныС выраТСния для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π΄ΠΎΠΌΠ΅Π½Π°Ρ…:

CREATE DOMAIN NEW_DOMAIN AS INTEGER DEFAULT (GEN_ID(NEW_GENERATOR, 1))

Подобная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ позволяСт Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° для выполнСния схоТих дСйствий.

Удобная опСрация объСдинСния строк

Yaffil позволяСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ строки с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° "||" ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° максимальной Π΄Π»ΠΈΠ½Ρ‹ строки. ΠŸΡ€ΠΈ этом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ максимально допустимый сСрвСром Ρ€Π°Π·ΠΌΠ΅Ρ€, Π° ошибка пСрСполнСния Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строкС. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° "||" соотвСтствуСт ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΌΡƒ повСдСнию ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π°Π΄ числами.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с объСдинСниСм Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ:

CREATE TABLE Π’(VI VARCHAR(20000), V2 VARCHAR(20000)}.

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ VI || V2 Interbase/Firebird Π²Ρ‹Π΄Π°Π΄ΡƒΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ пСрСполнСния Π΅Ρ‰Π΅ Π½Π° этапС компиляции. Π‘Π΅Ρ€Π²Π΅Ρ€ Yaffil Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° сформируСт строку VARCHAR(32765). Ошибка пСрСполнСния Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли количСство символов объСдинСния VI ΠΈ V2, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ½Ρ†Π΅Π²Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, прСвысит 32765.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности указания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠ»Π°Π½ΠΎΠ²

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

Yaffil Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ возмоТности использования явных ΠΏΠ»Π°Π½ΠΎΠ², Ρ‚Π΅ΠΌ самым прСдоставляя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ дальнСйшСго ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ Yaffil появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ явныС ΠΏΠ»Π°Π½Ρ‹ Π² нСкурсорных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… обновлСния Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ UPDATE ΠΈ DELETE. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ обновлСния ΠΈΠ»ΠΈ удалСния строк Π΄Π°Π½Π½Ρ‹Ρ… Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ порядкС ΡƒΠΊΠ°Π·Π°Π² использованиС индСкса Π² условии ORDER.

Как извСстно, Π² InterBase Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ использованиС явных ΠΏΠ»Π°Π½ΠΎΠ² Π² тСкстС Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ². Yaffil снимаСт это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅.

ИмСна индСксов ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ

ИспользованиС явных ΠΏΠ»Π°Π½ΠΎΠ² Π² Yaffil Π² Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ… ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… сущСствСнно упрощаСтся благодаря возмоТности имСнования индСксов, автоматичСски создаваСмых сСрвСром для ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ…, Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ вСрсиях InterBase Ρ‚Π°ΠΊΠΈΠ΅ индСксы ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΡŽΡ‚ систСмныС ΠΈΠΌΠ΅Π½Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RDBSPRIMARYX для индСксов ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, RDB$FOREIGNX для индСксов Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ RDB$X для индСксов ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. X ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ индСкса Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΠΎ порядку с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° создания Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ восстановлСния ΠΈΠ· Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ). Π’Π°ΠΊ ΠΊΠ°ΠΊ эти Π½ΠΎΠΌΠ΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ восстановлСнии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ индСксы Π² ΠΏΠ»Π°Π½Π΅ становится опасным. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ тупиковая ситуация: автоматичСский ΠΏΠ»Π°Π½ нСэффСктивСн, явный ΠΏΠ»Π°Π½ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСльзя. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ приходится ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС индСксы, Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ систСмныС. Однако появлСниС Π½ΠΎΠ²Ρ‹Ρ… индСксов Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ дискового пространства, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠΉ, замСдлСнию ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ обновлСния, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ вСроятности Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° ΠΈΠ·-Π·Π° увСличСния числа Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² соСдинСний Ρ‚Π°Π±Π»ΠΈΡ†.

Π’ Yaffil индСксы для ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

НуТноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ CONSTRAINT_INDEX_NAME Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. НапримСр:

SQL> create table T (id into not null, constraint PK_T primary

key (id));

SQL> show index;

PK_T UNIQUE INDEX ON Π’(ID)

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ΅ врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° для вСрсии SuperServer

Π’ сСрвСрах Bolrand InterBase вСрсии Π½ΠΈΠΆΠ΅ 7.0, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ SuperServer, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ обслуТиваниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ схСмС ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ сСрвСра. Однако ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ процСссора ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (диспСтчСризация) происходит Π½Π΅ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ "Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ". Вакая схСма ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ многозадачности Π² Windows 3.1 ΠΈ называСтся Π½Π΅Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ.