Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ Ρ…ΠΈΠ½Ρ‚Ρ‹ Π² T-SQL. Подсказки ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ часто ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. ВОП 10

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ прСдставлСно 10 популярных Ρ…ΠΈΠ½Ρ‚ΠΎΠ² языка T-SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ часто ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ администраторы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Microsoft SQL Server, ΠΈΠ½Ρ‹ΠΌΠΈ словами, ΠΌΡ‹ рассмотрим Ρ…ΠΈΠ½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов SQL Server ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ строит самый ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½ выполнСния запроса, ΠΏΡ€ΠΈ этом Π² случаС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° процСсс формирования ΠΏΠ»Π°Π½Π°, Ρ‚.Π΅. Ссли ΠΏΠ»Π°Π½ запроса со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ станСт Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, SQL Server автоматичСски Π΅Π³ΠΎ пСрСстроит.

А Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ…ΠΈΠ½Ρ‚Ρ‹, ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π΅ΠΌ SQL Server Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚.Π΅. Π² случаС измСнСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° посторСнниС ΠΏΠ»Π°Π½Π°, этот ΠΏΠ»Π°Π½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ пСрСстроСн ΠΈ запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСэффСктивно.

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

ВОП 10 популярных Ρ…ΠΈΠ½Ρ‚ΠΎΠ²

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим 10 популярных Ρ…ΠΈΠ½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π°Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² production, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для Ad Hoc запросов.

NOLOCK

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ «грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅Β». ПовСдСниС становится ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции READ UNCOMMITTED. Π₯ΠΈΠ½Ρ‚ NOLOCK Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Ρ…ΠΈΠ½Ρ‚Ρƒ READUNCOMMITTED.

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

NOEXPAND

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

Π₯ΠΈΠ½Ρ‚ NOEXPAND примСняСтся Ρ‚Π°ΠΊΠΆΠ΅ с Ρ†Π΅Π»ΡŒΡŽ ускорСния Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

RECOMPILE

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ SQL Server, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π½ выполнСния запроса Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ запускС этого запроса.

Π­Ρ‚ΠΎΡ‚ Ρ…ΠΈΠ½Ρ‚ примСняСтся Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π² кэшС находится ΠΏΠ»Π°Π½ запроса, нСподходящий для Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

RECOMPILE создаСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° процСссор ΠΈ Π² случаС высоконагруТСнных систСм ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ сСрвСр, поэтому ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

OPTIMIZE FOR

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ запросов, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² процСссС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запроса, Π½ΠΎ Π½Π΅ Π² процСссС выполнСния.

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Β«Parameter sniffingΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ»ΠΈ Π² случаС OPTIMIZE FOR UNKNOWN ΠΏΠΎΠ΄ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

TABLOCK

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎ получСнная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° примСняСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π₯ΠΈΠ½Ρ‚ TABLOCK часто ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² инструкциях ΠΏΠΎ массовой вставкС Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (INSERT), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это позволяСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ процСсс вставки Π΄Π°Π½Π½Ρ‹Ρ….

ROWLOCK

Π­Ρ‚ΠΎΡ‚ Ρ…ΠΈΠ½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вмСсто Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ страниц ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ строк.

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΡŒ Π² инструкциях обновлСния Π΄Π°Π½Π½Ρ‹Ρ… (UPDATE), Π΅Π³ΠΎ часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ с Ρ†Π΅Π»ΡŒΡŽ сниТСния гранулярности Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ способствуСт ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ инструкции.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°! ВсСм Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ своС знакомство с языком SQL, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ Β«SQL ΠΊΠΎΠ΄Β» – это ΡΠ°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ языку SQL для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов. Π’ Π½Π΅ΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны основныС конструкции языка.

READPAST

Π₯ΠΈΠ½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ SQL Server, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями. Π˜Π½Ρ‹ΠΌΠΈ словами, Ссли ΡƒΠΊΠ°Π·Π°Π½ Ρ…ΠΈΠ½Ρ‚ READPAST, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ уровня строк Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ, Ρ‚.Π΅. SQL Server Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ строки вмСсто Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сняты.

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для устранСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ SQL Server, Ρ‚.Π΅. ΠΊΠΎΠ³Π΄Π° записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ пСриодичСски ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ пропуск Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… записСй Π½Π΅Π²Π°ΠΆΠ΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

MAXDOP

Π₯ΠΈΠ½Ρ‚ пСрСопрСдСляСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°.

MAXDOP ΠΌΠΎΠΆΠ½ΠΎ часто Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² запросах с Ρ†Π΅Π»ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° (MAXDOP 1).

INDEX

Π­Ρ‚ΠΎΡ‚ Ρ…ΠΈΠ½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ использован ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ запросов ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ инструкции, ΠΈΠ½Ρ‹ΠΌΠΈ словами, фактичСски ΠΌΡ‹ привязываСм индСкс ΠΊ запросу.

INDEX ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ SQL Server всСгда примСнял ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ индСкс ΠΏΡ€ΠΈ построСнии ΠΏΠ»Π°Π½Π° запроса.

Однако, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ нСэффСктивным, поэтому пСриодичСски Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ запросы с Ρ…ΠΈΠ½Ρ‚ΠΎΠΌ INDEX Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚.Π΅. этот индСкс Π΅Ρ‰Π΅ эффСктивСн ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

FORCE ORDER

Π”Π°Π½Π½Ρ‹ΠΉ Ρ…ΠΈΠ½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запроса сохраняСтся порядок соСдинСния, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ синтаксисом запроса.

FORCE ORDER часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² запросах, ΠΊΠΎΠ³Π΄Π° SQL Server ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ примСняСт Π½Π΅ Ρ‚ΠΎΡ‚ порядок соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π±Ρ‹ самым эффСктивным.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°! Если Π’Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ встрСчаСтС Ρ…ΠΈΠ½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я здСсь Π½Π΅ ΡƒΠΊΠ°Π·Π°Π», Ρ‚ΠΎ расскаТитС это Π² коммСнтариях.

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ…ΠΈΠ½Ρ‚Ρ‹ Π² T-SQL (Microsoft SQL Server)

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ Вас Π½Π° сайтС Info-Comp.ru! Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ с Π’Π°ΠΌΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Ρ…ΠΈΠ½Ρ‚Ρ‹ Π² языкС T-SQL (Microsoft SQL Server), Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ…ΠΈΠ½Ρ‚ΠΎΠ² Π±Ρ‹Π²Π°ΡŽΡ‚, для Ρ‡Π΅Π³ΠΎ ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΌΡ‹ ΠΈΡ… ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°Ρ… ΠΌΡ‹ с Π’Π°ΠΌΠΈ рассмотрСли Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ выполнСния запроса Π² Microsoft SQL Server, ΠΏΠ»Π°Π½ выполнСния запроса, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΏΠ»Π°Π½Π° запроса, сСгодня ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° процСсс формирования ΠΏΠ»Π°Π½Π° выполнСния запроса, Π° Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΠΈΠ½Ρ‚ΠΎΠ².

Π₯ΠΈΠ½Ρ‚Ρ‹ Π² T-SQL

Π₯ΠΈΠ½Ρ‚ (hint) – это ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ запросов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пСрСопрСдСляСт Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° врСмя выполнСния SQL инструкции.

Π˜Π½Ρ‹ΠΌΠΈ словами, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΠΈΠ½Ρ‚Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ запросов, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ситуации Π² процСссС построСния ΠΏΠ»Π°Π½Π° запроса.

НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ индСкс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ физичСского соСдинСния Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΈΠ»ΠΈ, допустим, Π½Π° врСмя выполнСния запроса Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ «грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅Β».

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов SQL Server Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ самый ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½ выполнСния запроса ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΎΡˆΠΈΠ±Π°Π΅Ρ‚ΡΡ, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подсказки, Ρ‚.Π΅. Ρ…ΠΈΠ½Ρ‚Ρ‹, Π±Π΅Π· острой Π½Π° Ρ‚ΠΎ нСобходимости Π½Π΅ рСкомСндуСтся.

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

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

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

Π’ΠΈΠΏΡ‹ Ρ…ΠΈΠ½Ρ‚ΠΎΠ² Π² T-SQL

Π’ Microsoft SQL Server Ρ…ΠΈΠ½Ρ‚Ρ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… сСкциях запроса, ΠΈ Π½Π° основС этого ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ…ΠΈΠ½Ρ‚ΠΎΠ².

Join Hints

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ этого Ρ‚ΠΈΠΏΠ° Ρ…ΠΈΠ½Ρ‚ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π²Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° физичСского соСдинСния Ρ‚Π°Π±Π»ΠΈΡ†.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ…ΠΈΠ½Ρ‚Ρ‹:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΠΈΠ½Ρ‚Π° Hash ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π»ΠΈ Ρ‚ΠΈΠΏ физичСского соСдинСния Ρ‚Π°Π±Π»ΠΈΡ† Hash Match.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… физичСского соСдинСния Ρ‚Π°Π±Π»ΠΈΡ† ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅.

Query Hints

Π₯ΠΈΠ½Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ запросов Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° вСсь запрос. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΎΠ½ΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² SQL инструкции.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Ρ…ΠΈΠ½Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова OPTION. Π’ SQL запросС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ OPTION, ΠΏΡ€ΠΈ этом Π² Π½Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько Ρ…ΠΈΠ½Ρ‚ΠΎΠ².

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ…ΠΈΠ½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ запросов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ OPTION ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (прСдставлСна лишь нСбольшая Ρ‡Π°ΡΡ‚ΡŒ):

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

Π’ этом запросС ΠΌΡ‹ использовали Ρ…ΠΈΠ½Ρ‚ RECOMPILE.

Table Hints

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

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°! ВсСм Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ своС знакомство с языком SQL, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ Β«SQL ΠΊΠΎΠ΄Β» – это ΡΠ°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ языку SQL для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов. Π’ Π½Π΅ΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны основныС конструкции языка.

Π’ΠΎΡ‚ нСсколько популярных Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ…ΠΈΠ½Ρ‚ΠΎΠ²:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Production.Product ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ…ΠΈΠ½Ρ‚ INDEX, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ индСкс, Π° для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Production.ProductReview ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ…ΠΈΠ½Ρ‚ NOLOCK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ READ UNCOMMITTED, Ρ‚.Π΅. ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅).

На сСгодня это всС, надСюсь, ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±Ρ‹Π» Π’Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΏΠΎΠΊΠ°!

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

Π₯ΠΈΠ½Ρ‚Ρ‹ ΠΏΠ»Π°Π½Π΅Ρ€Π° Π² PostgreSQL

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ SQL β€” Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Β«Ρ‡Ρ‚ΠΎΒ» ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· Π±Π°Π·Ρ‹, Π° Β«ΠΊΠ°ΠΊΒ» это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” Π‘Π£Π‘Π” Ρ€Π΅ΡˆΠ°Π΅Ρ‚ сама. Π—Π°Π΄Π°Ρ‡Ρƒ Π²Ρ‹Π±ΠΎΡ€Π° для SQL-запроса ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ способа Π΅Π³ΠΎ выполнСния(ΠΏΠ»Π°Π½Π°) Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ практичСски Π² любой Π‘Π£Π‘Π”. Но ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½Π΅ самый Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΠ»Π°Π½. МногиС коммСрчСскиС Π‘Π£Π‘Π” ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π° этот случай Β«Ρ…ΠΈΠ½Ρ‚Ρ‹Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π°Π·Π΅, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос. Π’ Open Source Π‘Π£Π‘Π” PostgreSQL Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π½Π΅ Π±Ρ‹Π»ΠΎ.

И Π²ΠΎΡ‚, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎ, ΠΎ Ρ‡Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‡Ρ‚Π°Π»ΠΈ ΠΈ Ρ‡Π΅Π³ΠΎ ΡƒΠΆΠ΅ устали ΠΆΠ΄Π°Ρ‚ΡŒ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ боялись. ЯпонскиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ· NTT Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ…ΠΈΠ½Ρ‚Ρ‹ ΠΏΠ»Π°Π½Π΅Ρ€Π° PostgreSQL. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, ΠΈΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π΅ мСняя ядро, Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ модуля pg_hint_plan, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ вСрсии PostgreSQL 9.1 ΠΈ 9.2. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ…ΠΈΠ½Ρ‚Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сканирования ΠΈ соСдинСния Ρ‚Π°Π±Π»ΠΈΡ†, установку Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ GUC. Π—Π° дСталями установки ΠΈ использования Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Π‘ сайта ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ²Ρ‹ исходников ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ вСрсии 9.1 ΠΈ 9.2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΡ€Π°Π²Π΄Π°, Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΡ‡Π΅ΠΌ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ ΠΎΠ±Π΅ вСрсии. Ну Π΄Π° Π»Π°Π΄Π½ΠΎ. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ установка модуля ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚: make && make install. Для сборки потрСбуСтся dev-ΠΏΠ°ΠΊΠ΅Ρ‚ PostgreSQL ΠΎΡ‚ вашСго любимого дистрибутива. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ PostgreSQL ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚ΠΈΠ» ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ SQL Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ pg_hint_plan Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ shared_preload_libraries Π² Ρ„Π°ΠΉΠ»Π΅ postgresql.conf (вмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСссию, Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ LOAD). ПослС пСрСзапуска сСрвСра станут доступны Ρ‚Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Π΅ GUC ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: pg_hint_plan.enable_hint, pg_hint_plan.debug_print, pg_hint_plan.parse_messages. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ…ΠΈΠ½Ρ‚ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹), ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π΄Π²Π΅ β€” Π·Π° Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π₯ΠΈΠ½Ρ‚Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² коммСнтариях ΠΊ запросу, ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ /* ΠΈ */. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ интСрпрСтировался ΠΊΠ°ΠΊ Ρ…ΠΈΠ½Ρ‚, Ρƒ Π½Π΅Π³ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ Π·Π½Π°ΠΊ +, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ /*+ SeqScan(t1) */. Π₯ΠΈΠ½Ρ‚Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ².

Π₯ΠΈΠ½Ρ‚Ρ‹, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ сканирования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π₯ΠΈΠ½Ρ‚Ρ‹, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ соСдинСниС Ρ‚Π°Π±Π»ΠΈΡ†

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ запрос, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ значСниям Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ.

ΠŸΠ»Π°Π½Π΅Ρ€ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сканирования индСксов ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Bitmap Scan.

Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Index Scan.

И Π΄Π°ΠΆΠ΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ индСкс.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ послоТнСС. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ† с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ полю ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, сортировкой ΠΏΠΎ полю Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ LIMIT.

ΠŸΠ»Π°Π½Π΅Ρ€ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ»Π°Π½ c Index Scan ΠΏΠΎ test1_value1_idx ΠΈ Nested Loop.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ соСдинСния Ρ‚Π°Π±Π»ΠΈΡ†: HashJoin.

ΠŸΠ»Π°Π½Π΅Ρ€ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²Π½ΡƒΡ‚Ρ€ΡŒ Bitmap Index Scan ΠΏΠΎ test2, Π° снаруТи β€” сортировку с Limit.

Если, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ соСдинСния MergeJoin ΠΈ IndexScan ΠΏΠΎ индСксу test2_value_idx, Ρ‚ΠΎ ΠΏΠ»Π°Π½Π΅Ρ€, ΠΎΠΏΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ сортировки ΠΈ Limit.

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

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания (Transact-SQL)

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ подсказки ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° запросов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° врСмя выполнСния инструкции языка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (DML). Для этого ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ способ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ индСксов, опСрация ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сканирования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ поиска Π² индСксС, ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM инструкции DML ΠΈ относятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈ прСдставлСниям, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

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

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ:

Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ Π₯ΠΈΠ½Ρ‚Ρ‹ sql Ρ‡Ρ‚ΠΎ этоБинтаксичСскиС обозначСния Π² Transact-SQL

Бинтаксис

Бсылки Π½Π° описаниС синтаксиса Transact-SQL для SQL Server 2014 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсий, см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ДокумСнтация ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ вСрсиям.

АргумСнты

WITH ( ) [ [ , ]. n ]
Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания, Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли ΠΎΠ½ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом WITH. Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² скобки.

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова WITH являСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ: Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии Microsoft SQL Server этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ примСняСтся.

Если подсказка ΡƒΠΊΠ°Π·Π°Π½Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом WITH:

ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ подсказками рСкомСндуСтся ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ запятыС.

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ подсказок ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π° Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запятых, являСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии Microsoft SQL Server этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ примСняСтся.

NOEXPAND
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запроса ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ запросов Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ индСксированныС прСдставлСния Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ для доступа ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ прСдставлСниС Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с кластСризованным индСксом. АргумСнт NOEXPAND примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для индСксированных прСдставлСний. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ИспользованиС NOEXPAND.

Если сущСствуСт кластСризованный индСкс, INDEX(0) Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ кластСризованного индСкса, Π° INDEX(1) β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ кластСризованного индСкса ΠΈΠ»ΠΈ поиск ΠΏΠΎ Π½Π΅ΠΌΡƒ. Если кластСризованный индСкс Π½Π΅ сущСствуСт, INDEX(0) Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° INDEX(1) интСрпрСтируСтся ΠΊΠ°ΠΊ ошибка.

Если Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ спискС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько индСксов, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ индСксы ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для получСния строк ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ индСксов Π² ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ индСкса ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НСсколько ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ индСкса Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ И с индСксами, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов примСняСт ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ условий, сколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· индСксов, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ. Если коллСкция индСксов с подсказками Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² запросС столбцы, Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° для получСния ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… столбцов выполняСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ SQL Server Database Engine Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ всС индСксированныС столбцы.

Если ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ индСкса, ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅Π΅ΡΡ Π½Π° нСсколько индСксов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΊΡ‚ΠΎΠ² Π² соСдинСнии Ρ‚ΠΈΠΏΠ° Β«Π·Π²Π΅Π·Π΄Π°Β», ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ индСкс ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π˜Π›Π˜ с индСксами Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ индСкса.

МаксимальноС число индСксов Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Ρ€Π°Π²Π½ΠΎ 250 нСкластСризованным индСксам.

KEEPIDENTITY
ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² инструкции INSERT, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ BULK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с OPENROWSET.

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ значСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для столбца ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ KEEPIDENTITY Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, значСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² для Π΄Π°Π½Π½ΠΎΠ³ΠΎ столбца ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ, Π½ΠΎ Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов автоматичСски Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния Π½Π° основС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния ΠΈ приращСния, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ создании Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Если Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбца ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ прСдставлСния, Π° столбСц ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ являСтся послСдним Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, этот столбСц Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ИспользованиС Ρ„Π°ΠΉΠ»Π° форматирования для пропуска поля Π΄Π°Π½Π½Ρ‹Ρ… (SQL Server). Если столбСц ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½, Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов автоматичСски Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния для столбца ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ DBCC CHECKIDENT (Transact-SQL).

KEEPDEFAULTS
ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² инструкции INSERT, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ BULK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с OPENROWSET.

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° вставку установлСнного ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ значСния столбца Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ΅ имССтся, вмСсто значСния NULL, примСняСмого Π² случаС, ΠΊΠΎΠ³Π΄Π° запись Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ содСрТит значСния для этого столбца.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования этого указания Π² инструкции INSERT… Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± инструкции SELECT * FROM OPENROWSET(BULK. ) см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ NULL ΠΈΠ»ΠΈ использованиС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ массовом ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (SQL Server).

Начиная с SQL Server 2008 R2 с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ обновлСния 1 (SP1), Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ индСкса. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ поиска Π² индСксС ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ всС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ столбцы индСкса.

index_value
Имя ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° индСкса. Π£ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ индСкса 0 (ΠΊΡƒΡ‡Π°) нСльзя. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ индСкса, запроситС прСдставлСниС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.indexes.

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

Подсказка FORCESEEK ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π‘Π΅Π· указания INDEX ΠΈΠ»ΠΈ индСксаFROM dbo.MyTable WITH (FORCESEEK)ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поиска Π² индСксС для доступа ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈΠ»ΠΈ прСдставлСниям Ρ‡Π΅Ρ€Π΅Π· любой подходящий индСкс.
Π’ сочСтании с подсказкой INDEXFROM dbo.MyTable WITH (FORCESEEK, INDEX (MyIndex))ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ доступС ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ индСкс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поиска ΠΏΠΎ индСксу.
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ посрСдством указания индСкса ΠΈ столбцов индСксаFROM dbo.MyTable WITH (FORCESEEK (MyIndex (col1, col2, col3)))ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ поиска ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ индСксу ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ столбцы индСкса.

ΠŸΡ€ΠΈ использовании указания FORCESEEK (с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² индСксов ΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ…) Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ рСкомСндациями:

Если FORCESEEK указываСтся с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ индСкса, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ограничСния ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESEEK с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число ΠΏΠ»Π°Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ указания FORCESEEK Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ошибка Plan cannot be generated Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… случаях. Π’ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… выпусках Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ измСнСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° запросов ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ числа этих ΠΏΠ»Π°Π½ΠΎΠ².

FORCESCAN ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ: SQL Server 2008 R2 с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ обновлСния 1 (SP1) ΠΈ Π²Ρ‹ΡˆΠ΅. Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² качСствС ΠΏΡƒΡ‚ΠΈ доступа ΠΊ ссылочным Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈΠ»ΠΈ прСдставлСниям ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ сканирования Π² индСксС. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESCAN ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² Ρ‚Π΅Ρ… запросах, Π³Π΄Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ число Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… строк ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ поиска, Π° Π½Π΅ сканирования. Π’ этом случаС объСм памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ для Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточным, Ρ‡Ρ‚ΠΎ повлияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запроса.

Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESCAN ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ INDEX ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ. Π’ сочСтании с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ индСкса ( INDEX = index_name, FORCESCAN ) ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов рассматриваСт ΠΏΡƒΡ‚ΠΈ доступа для сканирования Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ индСкс ΠΏΡ€ΠΈ доступС ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESCAN ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ индСкса INDEX(0) для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сканирования Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Для сСкционированных Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ индСксов ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESCAN примСняСтся послС устранСния сСкционирования посрСдством вычислСния ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° запроса. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сканированиС выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ сСкциях, Π° Π½Π΅ Π²ΠΎ всСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESCAN ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ограничСния:

HOLDLOCK
Π Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ SERIALIZABLE. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ SERIALIZABLE см. Π΄Π°Π»Π΅Π΅ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. АргумСнт HOLDLOCK примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ Π·Π°Π΄Π°Π½, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° врСмя Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Π΅Π³ΠΎ инструкции. АргумСнт HOLDLOCK нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² инструкции SELECT, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ FOR BROWSE.

IGNORE_CONSTRAINTS
ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² инструкции INSERT, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ BULK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с OPENROWSET.

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ массового ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ограничСния Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ INSERT провСряСт ограничСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Π΅ ограничСния ΠΈ ограничСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ массового ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IGNORE_CONSTRAINTS, инструкция INSERT Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ограничСния Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ нСльзя ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ограничСния UNIQUE, PRIMARY KEY ΠΈΠ»ΠΈ NOT NULL.

ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ CHECK ΠΈ FOREIGN KEY ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ содСрТат Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ограничСния строки. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ CHECK ΠΈ FOREIGN KEY ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ произвСсти очистку Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкций Transact-SQL.

Однако ΠΏΡ€ΠΈ пропускС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ CHECK ΠΈ FOREIGN KEY послС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ помСчаСтся ΠΊΠ°ΠΊ is_not_trusted Π² прСдставлСнии ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.check_constraints ΠΈΠ»ΠΈ sys.foreign_keys. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ придСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° соотвСтствиС ограничСниям. Если Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π΅ Π±Ρ‹Π»Π° пустой ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ массового ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ ΠΎΡ‚ примСнСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ CHECK ΠΈ FOREIGN KEY ΠΊ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.

IGNORE_TRIGGERS
ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² инструкции INSERT, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ BULK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с OPENROWSET.

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ объСмного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для инструкции INSERT ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹.

АргумСнт IGNORE_TRIGGERS слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ зависит ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ΠΈ Π²Π°ΠΆΠ½ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

NOLOCK
Π Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ READUNCOMMITTED. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ READUNCOMMITTED см. Π΄Π°Π»Π΅Π΅ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅.

Для инструкций UPDATE ΠΈ DELETE. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии Microsoft SQL Server этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ примСняСтся.

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

READCOMMITTED
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ для уровня изоляции READ COMMITTED ΠΏΡƒΡ‚Π΅ΠΌ использования Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ управлСния вСрсиями строк. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… READ_COMMITTED_SNAPSHOT установлСн Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ OFF, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine устанавливаСт ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… READ_COMMITTED_SNAPSHOT Ρ€Π°Π²Π½ΠΎ ON, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями строк. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± уровнях изоляции см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

Для инструкций UPDATE ΠΈ DELETE. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии Microsoft SQL Server этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ примСняСтся.

READCOMMITTEDLOCK
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ для уровня изоляции READ COMMITTED ΠΏΡƒΡ‚Π΅ΠΌ использования Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ совмСщаСмыС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ снимаСт ΠΈΡ… послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π²Π½Π΅ зависимости ΠΎΡ‚ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… READ_COMMITTED_SNAPSHOT. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± уровнях изоляции см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ SET TRANSACTION ISOLATION LEVEL (Transact-SQL). Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ инструкции INSERT, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС возвращаСтся ошибка 4140.

READPAST
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π½Π΅ считываСт строки ΠΈ страницы, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями. Если ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ READPAST, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ уровня строк Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ, Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ уровня страниц β€” Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ строки вмСсто Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сняты. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ T1 Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ цСлочислСнный столбСц со значСниями 1, 2, 3, 4, 5. Если транзакция A ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3 Π½Π° 8, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ зафиксирована, Ρ‚ΠΎ инструкция SELECT * FROM T1 (READPAST) Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ значСния 1, 2, 4, 5. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ READPAST Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для устранСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ SQL Server. БрСдство чтСния ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ READPAST, пропускаСт ΠΏΡ€ΠΎΡˆΠ»Ρ‹Π΅ записи ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями, Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ доступной записи ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π½Π΅ доТидаясь, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ снимут свои Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

АргумСнт READPAST ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ для любой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ обращаСтся инструкция UPDATE ΠΈΠ»ΠΈ DELETE, ΠΈ ΠΊ любой Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ссылаСтся ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ FROM. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ READPAST Π·Π°Π΄Π°Π½ Π² инструкции UPDATE, ΠΎΠ½ примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ считывании Π΄Π°Π½Π½Ρ‹Ρ… для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… обновлСнию записСй Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½ Π² инструкции. АргумСнт READPAST для Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ· прСдлоТСния INTO инструкции INSERT Π·Π°Π΄Π°Ρ‚ΡŒ нСльзя. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ обновлСния ΠΈΠ»ΠΈ удалСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ READPAST, ΠΌΠΎΠ³ΡƒΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ считывании Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ»ΠΈ индСксированных прСдставлСний, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Ρ… индСксов.

АргумСнт READPAST ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² транзакциях, выполняСмых Π½Π° уровнях изоляции READ COMMITTED ΠΈΠ»ΠΈ REPEATABLE READ. ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ подсказки READPAST Π² транзакциях, выполняСмых с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ изоляции SNAPSHOT, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² сочСтании с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ подсказками, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ UPDLOCK ΠΈΠ»ΠΈ HOLDLOCK.

Π’Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ READPAST нСльзя ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ссли для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… READ_COMMITTED_SNAPSHOT установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ON ΠΈ выполняСтся ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… условий:

Π§Ρ‚ΠΎΠ±Ρ‹ Π² этих случаях ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ подсказку READPAST, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΡƒΡŽ подсказку READCOMMITTED (Ссли сущСствуСт) ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² запрос Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΡƒΡŽ подсказку READCOMMITTEDLOCK.

READUNCOMMITTED
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ. Для прСдотвращСния ситуаций, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, считанныС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ совмСщаСмыС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π° ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ чтСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π·Π° счСт считывания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями. Π­Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ошибками Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, прСдставлСниСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ нСзафиксированных Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ появлСниСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… записСй ΠΈΠ»ΠΈ ΠΈΡ… отсутствиСм.

Указания READUNCOMMITTED ΠΈ NOLOCK ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ВсС запросы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ запросы с указаниями READUNCOMMITTED ΠΈ NOLOCK, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Sch-S (ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ схСмы) Π² процСссС компиляции ΠΈ выполнСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ запросы Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ссли ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ транзакция ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Sch-M (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ схСмы). НапримСр, опСрация языка DDL ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Sch-M Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° измСняСт Π΄Π°Π½Π½Ρ‹Π΅ схСмы. ВсС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ запросы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ выполняСмыС с указаниями READUNCOMMITTED ΠΈΠ»ΠΈ NOLOCK, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Sch-S. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, запрос, ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Sch-S, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, которая пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Sch-M.

Подсказки READUNCOMMITTED ΠΈ NOLOCK для Ρ‚Π°Π±Π»ΠΈΡ†, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… опСрациями вставки, обновлСния ΠΈΠ»ΠΈ удалСния, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСльзя. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов SQL Server Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ подсказки READUNCOMMITTED ΠΈ NOLOCK Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM, примСняСмыС ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ инструкции UPDATE ΠΈΠ»ΠΈ DELETE.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° использования подсказок READUNCOMMITTED ΠΈ NOLOCK Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM, примСняСмом ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ инструкции UPDATE ΠΈΠ»ΠΈ DELETE, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии SQL Server. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования этих ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ Π² Ρ‚Π°ΠΊΠΎΠΌ контСкстС Π² Π½ΠΎΠ²ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΈΡ… Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚.

ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состязаниС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π²ΠΎ врСмя Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ «грязных» Ρ‡Ρ‚Π΅Π½ΠΈΠΉ нСзафиксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± уровнях изоляции см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

Если выдаСтся сообщСниС ΠΎΠ± ошибкС 601 ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ READUNCOMMITTED, Π΅Π΅ слСдуСт Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (сообщСниС ΠΎΠ± ошибкС 1205), ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ.

REPEATABLEREAD
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сканированиС выполняСтся с Ρ‚ΠΎΠΉ ΠΆΠ΅ сСмантикой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ транзакция, запущСнная Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции REPEATABLE READ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± уровнях изоляции см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

ROWLOCK
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вмСсто Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ страниц ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строк. ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ строк Π² транзакциях, выполняСмых Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции SNAPSHOT, ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° подсказка ROWLOCK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сочСтании с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ подсказками, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ UPDLOCK ΠΈΠ»ΠΈ HOLDLOCK. ROWLOCK нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ кластСризованный индСкс columnstore. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ возвращаСтся ошибка 651.

SERIALIZABLE
Π Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ HOLDLOCK. НакладываСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ограничСния Π½Π° ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ: ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ вмСсто снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ страница Π΄Π°Π½Π½Ρ‹Ρ… большС Π½Π΅ трСбуСтся, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° Π»ΠΈ транзакция. Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСтся с Ρ‚ΠΎΠΉ ΠΆΠ΅ сСмантикой, Ρ‡Ρ‚ΠΎ ΠΈ транзакция, запущСнная Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции SERIALIZABLE. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± уровнях изоляции см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

SNAPSHOT
ΠžΠ±Π»Π°ΡΡ‚ΡŒ примСнСния: SQL Server 2014 (12.x) ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсий.

Доступ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ для памяти, выполняСтся с изоляциСй SNAPSHOT. SNAPSHOT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ для памяти (Π½Π΅ с дисковыми Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для памяти.

SPATIAL_WINDOW_MAX_CELLS =
ΠžΠ±Π»Π°ΡΡ‚ΡŒ примСнСния: SQL Server 2012 (11.x) ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсий.
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ максимальноС количСство ячССк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для тСссСляции гСомСтричСского ΠΈΠ»ΠΈ гСографичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. β€” это число ΠΎΡ‚ 1 Π΄ΠΎ 8192.

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ½ΠΊΡƒΡŽ настройку Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния запроса Π·Π° счСт настройки компромисса ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Π§Π΅ΠΌ большС число, Ρ‚Π΅ΠΌ мСньшС врСмя выполнСния Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈ большС врСмя выполнСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡ‚Π½Ρ‹Ρ… пространствСнных Π΄Π°Π½Π½Ρ‹Ρ… большСС число Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ большСС врСмя выполнСния Π·Π° счСт Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ приблиТСния с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ ΠΈ сокращСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Для получСния Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… мСньшСС число сократит врСмя выполнСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΈ Π² автоматичСской тСссСляции сСтки.

TABLOCK
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ получСнная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° примСняСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ΠΈΠΏ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая инструкция выполняСтся. НапримСр, инструкция SELECT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ совмСщаСмой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ TABLOCK совмСщаСмая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° примСняСтся ΠΊΠΎ всСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π° Π½Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ строк ΠΈΠ»ΠΈ страниц. Если Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ HOLDLOCK, Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ удСрТиваСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π’ΠΎ врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΡƒΡ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции INSERT INTO SELECT FROM ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ минимальноС Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для инструкции, Π·Π°Π΄Π°Π² для Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ TABLOCK. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π° простая модСль восстановлСния ΠΈΠ»ΠΈ модСль восстановлСния с Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, подсказка TABLOCK позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вставки Π² ΠΊΡƒΡ‡ΠΈ ΠΈΠ»ΠΈ кластСризованныС индСксы columnstore. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ INSERT (Transact-SQL).

ΠŸΡ€ΠΈ использовании с поставщиком Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² строк OPENROWSET для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ TABLOCK позволяСт нСскольким ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ записи Π² ΠΆΡƒΡ€Π½Π°Π» ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ условия для минимального протоколирования массового ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ….

TABLOCKX
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ примСняСтся монопольная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

UPDLOCK
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ обновлСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. UPDLOCK ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ обновлСния для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ строк ΠΈΠ»ΠΈ страниц. Если UPDLOCK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сочСтании с TABLOCK ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‚ΠΎ вмСсто Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° монопольная (X) Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

Если ΡƒΠΊΠ°Π·Π°Π½ΠΎ UPDLOCK, Ρ‚ΠΎ указания уровня изоляции READCOMMITTED ΠΈ READCOMMITTEDLOCK Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ. НапримСр, Ссли ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Π² Π΄Π°Π½Π½ΠΎΠΌ сСансС установлСн Π² SERIALIZABLE ΠΈ Π² запросС ΡƒΠΊΠ°Π·Π°Π½ΠΎ (UPDLOCK, READCOMMITTED), Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ READCOMMITTED Π½Π΅ учитываСтся ΠΈ транзакция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции SERIALIZABLE.

XLOCK
Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Если ΠΏΡ€ΠΈ этом ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ROWLOCK, PAGLOCK ΠΈΠ»ΠΈ TABLOCK, монопольная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° примСняСтся ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ гранулярности.

Remarks

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Ссли доступ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ прСдусмотрСн ΠΏΠ»Π°Π½ΠΎΠΌ запроса. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²ΠΎΠΎΠ±Ρ‰Π΅ отказался ΠΎΡ‚ доступа ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ вмСсто этого ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ индСксированному ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ. Π’ послСднСм случаС доступ ΠΊ индСксированному ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ подсказки Π² запросС OPTION (EXPAND VIEWS).

ВсС подсказки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° всС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ прСдставлСния, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ доступ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ запроса, Π² Ρ‚ΠΎΠΌ числС Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ прСдставлСния, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся Π΄Π°Π½Π½ΠΎΠ΅ прСдставлСниС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, SQL Server выполняСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ согласованности Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Указания Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ROWLOCK, UPDLOCK ΠΈ XLOCK, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ уровня строки, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΈ индСкса вмСсто фактичСских строк Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ссли для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ имССтся нСкластСризованный индСкс, Π° инструкция SELECT обрабатываСтся ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ индСксом с использованиСм подсказки Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° накладываСтся Π½Π° ΠΊΠ»ΡŽΡ‡ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ индСкса вмСсто строки Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

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

SQL Server Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ указания ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ† Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM.

Подсказки ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ индСкса

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ индСкса, Ссли Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… SET Π½Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… индСксов. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ CREATE INDEX (Transact-SQL).

ИспользованиС NOEXPAND

АргумСнт NOEXPAND примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для индСксированных прСдставлСний. Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС β€” это прСдставлСниС с созданным Π½Π° Π½Π΅ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ кластСризованным индСксом. Если запрос содСрТит ссылки Π½Π° столбцы, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊ Π² индСксированном прСдставлСнии, Ρ‚Π°ΠΊ ΠΈ Π² Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов опрСдСляСт, Ρ‡Ρ‚ΠΎ использованиС индСксированного прСдставлСния являСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ выполнСния запроса, Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс прСдставлСния. Π­Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ называСтся сопоставлСниСм индСксированного прСдставлСния. Π”ΠΎ SQL Server 2016 (13.x); с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ обновлСния 1 (SP1) автоматичСскоС использованиС индСксированного прСдставлСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ запросов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ выпуски SQL Server. Π‘ΠΌ. свСдСния ΠΎ выпусках ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… функциях SQL Server 2016, 2017 ΠΈ 2019 (15.x).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π» индСксированныС прСдставлСния для сопоставлСния ΠΈΠ»ΠΈ примСнял индСксированноС прСдставлСниС, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ производится с использованиСм указания NOEXPAND, Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² SET Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ON.

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… SQL Azure ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ автоматичСскоС использованиС индСксированного прСдставлСния Π±Π΅Π· указания NOEXPAND.

1 ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ARITHABORT нСявным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ON, ΠΊΠΎΠ³Π΄Π° для ANSI_WARNINGS устанавливаСтся ON. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅Π½ΡΡ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ NUMERIC_ROUNDABORT Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² OFF.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов использовал индСкс для индСксированного прСдставлСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ NOEXPAND. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли прСдставлСниС Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΎ Π² запросС. Π’ SQL Server Π½Π΅Ρ‚ указания для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ использования ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ индСксированного прСдставлСния Π² запросС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прСдставлСниС явно Π½Π΅ Π½Π°Π·Π²Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM. ΠŸΡ€ΠΈ этом ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксированныС прСдставлСния, Π΄Π°ΠΆΠ΅ Ссли запрос Π½Π΅ обращаСтся ΠΊ Π½ΠΈΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ SQL Server Database Engine Π² индСксированном прСдставлСнии автоматичСски создаСтся статистика Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ указания NOEXPAND. ΠŸΡ€ΠΎΠΏΡƒΡΠΊ этой подсказки ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ прСдупрСТдСниям ΠΎΠ± ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ статистикС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, создав статистику Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ΠΎ врСмя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запроса ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статистику прСдставлСния, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ автоматичСски ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΊΠΎΠ³Π΄Π° запрос Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ссылаСтся Π½Π° прСдставлСниС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ NOEXPAND.

ИспользованиС Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ указания Π² качСствС указания запроса

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ запроса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСдлоТСния OPTION (TABLE HINT). Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС подсказок Π² запросах Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС структуры ΠΏΠ»Π°Π½Π°. Для Π½Π΅Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… запросов эти указания слСдуСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ указания. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Указания запросов (Transact-SQL).

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Для ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ KEEPIDENTITY, IGNORE_CONSTRAINTS ΠΈ IGNORE_TRIGGERS Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ALTER для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

A. ИспользованиС подсказки TABLOCK для указания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Production.Product Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… AdventureWorks2012 накладываСтся совмСщаСмая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, удСрТиваСмая Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ инструкции UPDATE.

Π‘. ИспользованиС указания FORCESEEK для указания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поиска Π² индСксС

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС указания FORCESEEK Π±Π΅Π· указания индСкса, ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ запросов Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ поиска Π² индСксС для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Sales.SalesOrderDetail Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… AdventureWorks2012.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ FORCESEEK с индСксом прСдписываСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ запросов Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ поиска ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу ΠΈ столбцу индСкса.

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

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

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