Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak utworzyć indeks dla kolumny ciągu w sql?

Jeśli twój łańcuch jest dłuższy niż 900 bajtów, to nie może być kluczem indeksu, niezależnie od tego, czy ma zmienną czy stałą długość.

Jednym z pomysłów byłoby przynajmniej uczynienie poszukiwań bardziej selektywnymi przez dodanie kolumny obliczeniowej. np.

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

Teraz, szukając wiersza do aktualizacji, możesz powiedzieć:

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

Pomoże to przynajmniej optymalizatorowi zawęzić wyszukiwanie do stron indeksu, na których istnieje największe prawdopodobieństwo wystąpienia dokładnego dopasowania. Możesz poeksperymentować z tą długością, ponieważ zależy ona od tego, ile masz podobnych ciągów i co najlepiej pomoże optymalizatorowi wyeliminować pojedynczą stronę. Możesz także poeksperymentować z włączeniem niektórych lub wszystkich innych kolumn do ss indeks, z lub bez użycia INCLUDE klauzula (czy to jest przydatne, będzie się znacznie różnić w zależności od różnych czynników, takich jak co jeszcze robi zapytanie aktualizacyjne, współczynnik odczytu/zapisu itp.).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wprowadzanie dynamicznie generowanej tabeli przestawnej do tabeli temp

  2. Sql Server, co zrobić, aby utworzyć klucz sortowania z wartości ciągu?

  3. Złożone sortowanie pola string - liczba - string

  4. Datetime T-SQL zaokrąglone do najbliższej minuty i najbliższych godzin przy użyciu funkcji

  5. Uzyskaj właściwą część ciągu w SQL Server (T-SQL)