Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° эффСктивных ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π±Π΅Π· ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ владСния языком запросов. Одной ΠΈΠ· самых вострСбованных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся поиск ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° тСкста Π²Π½ΡƒΡ‚Ρ€ΠΈ строкового поля. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π° ΠΏΠΎ части названия, ΠΎΡ‚ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρƒ ΠΏΠΎ Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»Ρƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ. ИмСнно для этих Ρ†Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ поиска подстроки.

Π’ 1Π‘ 8 сущСствуСт нСсколько способов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ синтаксиса. Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π‘Π£Π‘Π” (MS SQL, PostgreSQL ΠΈΠ»ΠΈ встроСнная) ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ систСмы. ПониманиС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ функциями ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстро Π΄Π°ΠΆΠ΅ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

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

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² запросах

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

Для ΠΎΡ‚Π±ΠΎΡ€Π° записСй Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравниваСтся с Π½ΡƒΠ»Π΅ΠΌ Π² условии Π“Π”Π•. Однако для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ ΠΈΠ»ΠΈ слоТных условий, Π³Π΄Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ нСдоступны, этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ остаСтся Π±Π΅Π·Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ.

Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ символ поиска, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ поискС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ вхоТдСния слова Π² Π΄Π»ΠΈΠ½Π½ΠΎΠΌ тСкстС. АргумСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” исходная строка, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” искомая подстрока.

ВЫБРАВЬ

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура.НаимСнованиС КАК НаимСнованиС,

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура.Артикул КАК Артикул

Π˜Π—

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура

Π“Π”Π•

ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ(Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура.Артикул, &ΠΡ€Ρ‚ΠΈΠΊΡƒΠ»Π§Π°ΡΡ‚ΡŒ) > 0

ИспользованиС ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² условии ΠΎΡ‚Π±ΠΎΡ€Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ &ΠΡ€Ρ‚ΠΈΠΊΡƒΠ»Π§Π°ΡΡ‚ΡŒ пСрСдаСтся ΠΈΠ· ΠΊΠΎΠ΄Π° 1Π‘ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ символы. Если пСрСмСнная пуста, функция Π²Π΅Ρ€Π½Π΅Ρ‚ 1 (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ пустая строка считаСтся находящСйся Π² Π½Π°Ρ‡Π°Π»Π΅ любой строки), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ всСх записСй. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всСгда провСряйтС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ запроса.

πŸ’‘

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ поиска ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² условиС Π“Π”Π• ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ: И &ΠΡ€Ρ‚ΠΈΠΊΡƒΠ»Π§Π°ΡΡ‚ΡŒ <> "". Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ всСго справочника ΠΏΡ€ΠΈ случайном сбросС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° ΠΊ рСгистру Π² зависимости ΠΎΡ‚ настроСк сравнСния строк Π² вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ Π‘Π£Π‘Π”. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв для 1Π‘ 8.3 сравнСниС происходит Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра, Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π½Π° PostgreSQL ΠΏΡ€ΠΈ спСцифичСских настройках ΠΊΠΎΠ»Π»Π°Ρ†ΠΈΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠŸΠžΠ”ΠžΠ‘ΠΠž ΠΈ поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ

Π―Π·Ρ‹ΠΊ запросов 1Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠŸΠžΠ”ΠžΠ‘ΠΠž, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ с использованиСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов подстановки. Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с простой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ поиска, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС условия вхоТдСния тСкста Π² Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠ»ΠΈ сСрСдинС строки.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ символами подстановки ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ %, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡƒΡΡ‚ΡƒΡŽ), ΠΈ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ _, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π΅ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ любой символ. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ эти символы с искомым тСкстом, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сцСнарии Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· написания слоТного ΠΊΠΎΠ΄Π° Π½Π° встроСнном языкС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° для поиска Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит слово "Π’Π΅Π»Π΅Ρ„ΠΎΠ½":

ВЫБРАВЬ

НомСнклатура.НаимСнованиС

Π˜Π—

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК НомСнклатура

Π“Π”Π•

НомСнклатура.НаимСнованиС ΠŸΠžΠ”ΠžΠ‘ΠΠž "%Π’Π΅Π»Π΅Ρ„ΠΎΠ½%"

Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ записи, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹, шаблон Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ "А%". Для поиска записСй, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ шаблон "%.txt". ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠŸΠžΠ”ΠžΠ‘ΠΠž часто транслируСтся Π΄Π²ΠΈΠΆΠΊΠΎΠΌ 1Π‘ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ LIKE, Ρ‡Ρ‚ΠΎ обСспСчиваСт Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° сторонС сСрвСра Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ
ΠŸΠžΠ”ΠžΠ‘ΠΠž
% (LIKE)
НайтиВВСкстС

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ использованиС символа ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° Π² Π½Π°Ρ‡Π°Π»Π΅ шаблона (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "%тСкст") часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Table Scan), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ стандартныС индСксы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для поиска подстроки Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ мСстС. Π­Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ высоконагруТСнных систСм.

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с LIKE Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π‘Π£Π‘Π”

Π₯отя ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ абстрагируСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π‘Π£Π‘Π”, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠŸΠžΠ”ΠžΠ‘ΠΠž (Π°Π½Π°Π»ΠΎΠ³ SQL LIKE) Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивныС запросы. ПовСдСниС поиска ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…: MS SQL Server, PostgreSQL ΠΈΠ»ΠΈ встроСнной SQL-сСрвСр 1Π‘.

Π’ MS SQL Server ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сравнСниС Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра, Ссли коллация Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… настроСна ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Cyrillic_General_CI_AS). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ "%Π°Π±Π²" Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΈ "Π°Π±Π²", ΠΈ "АБВ". Π’ PostgreSQL ситуация слоТнСС: ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… поля (VARCHAR ΠΈΠ»ΠΈ TEXT) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π°Ρ†ΠΈΠΈ. Для ΠΏΠΎΠ»Π΅ΠΉ с ΠΊΠΎΠ»Π»Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊ рСгистру, поиск ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π½Π°ΠΉΡ‚ΠΈ совпадСний ΠΏΡ€ΠΈ нСсовпадСнии рСгистра Π±ΡƒΠΊΠ².

Для обСспСчСния прСдсказуСмого повСдСния рСкомСндуСтся ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ строки ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ рСгистру ΠΏΠ΅Ρ€Π΅Π΄ сравнСниСм, Ссли Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² настройках Π‘Π£Π‘Π”. Однако это дСйствиС Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ использованиС индСксов. Π’ соврСмСнных вСрсиях 1Π‘ 8.3 ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ запросов стараСтся автоматичСски ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ условия, Π½ΠΎ явный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚.

Π‘Π£Π‘Π” ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ SQL Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊ рСгистру ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ
MS SQL Server LIKE Зависит ΠΎΡ‚ ΠΊΠΎΠ»Π»Π°Ρ†ΠΈΠΈ Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ полнотСкстового поиска
PostgreSQL LIKE / ILIKE Бтрогая (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ внимания ΠΊ настройкам Π»ΠΎΠΊΠ°Π»ΠΈ
ВстроСнная 1Π‘ LIKE Π‘Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ 1Π‘

ΠŸΡ€ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ с ΠΎΠ΄Π½ΠΎΠΉ Π‘Π£Π‘Π” Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ тСстируйтС запросы с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠŸΠžΠ”ΠžΠ‘ΠΠž. Различия Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сравнСния строк ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚, Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° SQL Server, Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ записи ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ лишниС Π½Π° PostgreSQL.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллация?

ΠšΠΎΠ»Π»Π°Ρ†ΠΈΡ (Collation) β€” это Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… порядок сортировки ΠΈ сравнСния символов Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Она Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΡ€Π°Π²ΠΈΠ»Π° ΡƒΡ‡Π΅Ρ‚Π° рСгистра, ΡƒΠ΄Π°Ρ€Π΅Π½ΠΈΠΉ ΠΈ спСцифику Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°.

Ѐункция НайтиВВСкстС ΠΈ полнотСкстовый поиск

Π’ контСкстС поиска подстрок часто упоминаСтся функция НайтиВВСкстС, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ контСксты Π΅Π΅ использования. Π’ языкС запросов 1Π‘ 8 основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ остаСтся ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ. Ѐункция НайтиВВСкстС Ρ‡Π°Ρ‰Π΅ ассоциируСтся с возмоТностями полнотСкстового поиска (Full-Text Search), доступного Π² ΡΡ‚Π°Ρ€ΡˆΠΈΡ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π‘Π£Π‘Π”.

ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ поиск ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими объСмами тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π³Π΄Π΅ трСбуСтся Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ слова Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стоп-слова ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠΎΡ€Ρ„ΠΎΠ»ΠΎΠ³ΠΈΡŽ языка. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с простым поиском подстроки. Он Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ создания ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… полнотСкстовых индСксов ΠΈ настройкС словарСй.

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

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, для аналитичСских Π·Π°Π΄Π°Ρ‡, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΡ‰ΡƒΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ содСрТимому ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈΠ»ΠΈ описаний Π½Π° СстСствСнном языкС, стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ полнотСкстового поиска. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ поиск ΠΏΠΎ словоформам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск "ΠΊΡƒΠΏΠΈΡ‚ΡŒ" Π½Π°ΠΉΠ΄Π΅Ρ‚ "ΠΊΡƒΠΏΠΈΠ»", "ΠΏΠΎΠΊΡƒΠΏΠΊΠ°").

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ поиск Π½Π΅ поддСрТиваСтся Π²ΠΎ встроСнном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π‘Π£Π‘Π” 1Π‘ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСрвСров Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (MS SQL, PostgreSQL) с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ ΠΈ настройками ΠΏΡ€Π°Π² доступа.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ поискС подстроки

Главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° поиска подстроки β€” это потСря возмоТности использования индСксов. Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ условиС Π²ΠΈΠ΄Π° ПолС ΠŸΠžΠ”ΠžΠ‘ΠΠž "%Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅%", ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов часто Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ индСкс B-Π΄Π΅Ρ€Π΅Π²ΡŒΡ отсортирован ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ строки, Π° Π½Π΅ ΠΏΠΎ Π΅Π΅ сСрСдинС. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ замСдлСнию Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ ростС объСма Π΄Π°Π½Π½Ρ‹Ρ….

БущСствуСт нСсколько ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² для смягчСния этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ символа подстановки Π² Π½Π°Ρ‡Π°Π»Π΅ шаблона, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Поиск ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅%" (начинаСтся с..) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ индСкс ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°Ρ… записСй. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΈ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ тСкстового поиска.

Если поиск ΠΏΠΎ подстрокС являСтся критичСски Π²Π°ΠΆΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ вашСго прилоТСния ΠΈ выполняСтся часто, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания вычисляСмого поля ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ рСгистра свСдСний, Π³Π΄Π΅ хранится нормализованная вСрсия строки ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова для поиска. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ пСрСнСсти тяТСлыС вычислСния Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ записи Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° чтСния.

β˜‘οΈ Π§Π΅ΠΊ-лист ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ поиска

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

Анализ ΠΏΠ»Π°Π½Π° выполнСния запроса (Execution Plan) β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Он ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ индСксный поиск (Index Seek) ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС (Table Scan). Π’ 1Π‘ 8.3 консоль запросов прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого процСсса.

πŸ’‘

Поиск подстроки с символом % Π² Π½Π°Ρ‡Π°Π»Π΅ шаблона практичСски всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ являСтся самым ΡƒΠ·ΠΊΠΈΠΌ мСстом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сцСнарий: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС счСта-Ρ„Π°ΠΊΡ‚ΡƒΡ€Ρ‹, Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ упоминаСтся Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠΌΠ΅Ρ€ частично, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "123/А". Ошибка Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ экранировании ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов ΠΈΠ»ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

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

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ нюанс β€” Ρ€Π°Π±ΠΎΡ‚Π° с NULL-значСниями. Если ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым (NULL), функция поиска ΠΌΠΎΠΆΠ΅Ρ‚ вСсти сСбя Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. Π’ SQL NULL Π½Π΅ Ρ€Π°Π²Π΅Π½ NULL ΠΈ Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΈΡ… строк. УсловиС ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ(ПолС, "тСкст") для NULL-поля Π²Π΅Ρ€Π½Π΅Ρ‚ NULL, Ρ‡Ρ‚ΠΎ Π² логичСском Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ трактуСтся ΠΊΠ°ΠΊ Π›ΠΎΠΆΡŒ, поэтому запись Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎ Π½Π΅ΠΌ стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного поиска с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ пустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

ВЫБРАВЬ

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.РСализация.НомСр,

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.РСализация.ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.РСализация КАК Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.РСализация

Π“Π”Π•

(Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.РСализация.ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π•Π‘Π’Π¬ НЕ NULL)

И (ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ(Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.РСализация.ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, &Π§Π°ΡΡ‚ΡŒΠ’Π΅ΠΊΡΡ‚Π°) > 0)

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

Как ΠΈΡΠΊΠ°Ρ‚ΡŒ подстроку с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра?

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1Π‘ выполняСт поиск Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра. Для поиска с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования строки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° настройки ΠΊΠΎΠ»Π»Π°Ρ†ΠΈΠΈ Π‘Π£Π‘Π”, Ссли ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сравнСниС с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра (Binary Collation).

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния Π² запросС 1Π‘?

НСт, язык запросов 1Π‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ рСгулярныС выраТСния (RegExp) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ конструкции ВЫБРАВЬ-Π“Π”Π•. Для слоТного ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½-ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° сторонС встроСнного языка 1Π‘, Π³Π΄Π΅ доступны ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСгулярными выраТСниями, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π‘Π£Π‘Π” Ρ‡Π΅Ρ€Π΅Π· Passing Query.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ поиск ΠΏΠΎ подстрокС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅?

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘ ΠΈΠΌΠ΅Π΅Ρ‚ ограничСния Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… индСксации ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ сканирования Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈ поискС подстроки Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Ρ„Π°ΠΉΠ» Π±Π°Π·Ρ‹ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ создаСт ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ "зависания" систСмы ΠΏΡ€ΠΈ ростС объСма Π΄Π°Π½Π½Ρ‹Ρ….

Как Π½Π°ΠΉΡ‚ΠΈ всС вхоТдСния подстроки, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅?

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π“Π”Π• Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ строки, Π° Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ…. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ цикличСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° встроСнном языкС 1Π‘ послС получСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠŸΠΎΠΈΡΠΊΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ со смСщСниСм Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ рСкурсивный запрос, Ссли структура Π΄Π°Π½Π½Ρ‹Ρ… позволяСт.