Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да създадете индекс за низова колона в sql?

Ако вашият низ е по-дълъг от 900 байта, той не може да бъде индексен ключ, независимо дали е с променлива или фиксирана дължина.

Една идея би била поне да направим търсенето по-селективно чрез добавяне на изчислена колона. напр.

CREATE TABLE dbo.Strings
(
  -- other columns,
  WholeString VARCHAR(4000),
  Substring AS (CONVERT(VARCHAR(10), WholeString) PERSISTED
);
CREATE INDEX ss ON dbo.Strings(Substring);

Сега, когато търсите ред за актуализиране, можете да кажете:

WHERE s.Substring = LEFT(@string, 10)
AND s.WholeString = @string;

Това поне ще помогне на оптимизатора да стесни търсенето си до индексираните страници, където е най-вероятно да съществува точното съвпадение. Може да искате да експериментирате с тази дължина, тъй като зависи от това колко подобни низове имате и какво най-добре ще помогне на оптимизатора да отсее една страница. Може също да искате да експериментирате с включването на някои или всички други колони в ss индекс, със или без използване на INCLUDE клауза (дали това е полезно ще варира значително в зависимост от различни фактори, като например какво друго прави вашата заявка за актуализиране, съотношение четене/запис и т.н.).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да позволя на параметър на падащ списък в SSRS да има стойност по подразбиране на -- All -- ?

  2. Генерирайте изрази CREATE INDEX в SQL Server

  3. Какви фактори могат да причинят повторно компилиране на съхранена процедура на SQL Server?

  4. Могат ли да се прилагат скаларни функции преди филтриране при изпълнение на SQL оператор?

  5. Как да генерирате скрипт, за да активирате всички ограничения на външния ключ в базата данни на SQL Server - SQL Server / TSQL Урок, част 78