sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan opretter man et indeks for en strengkolonne i sql?

Hvis din streng er længere end 900 bytes, kan den ikke være en indeksnøgle, uanset om den er variabel eller fast længde.

En idé ville være i det mindste at gøre søgninger mere selektive ved at tilføje en beregnet kolonne. f.eks.

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

Når du nu søger efter en række, der skal opdateres, kan du sige:

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

Dette vil i det mindste hjælpe optimeringsværktøjet med at indsnævre sin søgning til de indekssider, hvor det nøjagtige match er mest sandsynligt. Det kan være en god ide at eksperimentere med den længde, da det afhænger af, hvor mange ens strenge du har, og hvad der bedst hjælper optimeringsværktøjet med at luge en enkelt side ud. Du vil måske også eksperimentere med at inkludere nogle eller alle de andre kolonner i ss indeks, med eller uden brug af INCLUDE klausul (om dette er nyttigt vil variere meget af forskellige faktorer, såsom hvad din opdateringsforespørgsel ellers gør, læse/skriveforhold osv.).



  1. Sådan monteres en postgresql-volumen ved hjælp af Aws EBS i Kubernete

  2. Hvor kan jeg finde en komplet liste over foruddefinerede Oracle pl/SQL-undtagelser?

  3. Er der en måde at installere java på Oracle 11g XE?

  4. Styring af replikeringsfailover for MySQL og MariaDB med scripts før eller efter failover