sql >> Databáze >  >> RDS >> Sqlserver

Jak vytvořit index pro sloupec řetězce v SQL?

Pokud je váš řetězec delší než 900 bajtů, nemůže to být indexový klíč, bez ohledu na to, zda má proměnnou nebo pevnou délku.

Jedním z nápadů by bylo alespoň učinit vyhledávání selektivnější přidáním vypočítaného sloupce. např.

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

Nyní při hledání řádku k aktualizaci můžete říci:

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

To alespoň pomůže optimalizátoru zúžit vyhledávání na indexové stránky, kde se s největší pravděpodobností vyskytuje přesná shoda. Možná budete chtít experimentovat s touto délkou, protože závisí na tom, kolik podobných řetězců máte a co optimalizátoru nejlépe pomůže vyřadit jednu stránku. Můžete také experimentovat se zahrnutím některých nebo všech ostatních sloupců do ss index, s nebo bez použití INCLUDE klauzule (zda je to užitečné, se bude značně lišit v závislosti na různých faktorech, jako je například to, co ještě dělá váš aktualizační dotaz, poměr čtení/zápisu atd.).



  1. Jak ověřit, že archiv vytvořený archivem pg_dump je v pořádku a platný?

  2. Dotaz MySQL GROUP BY den / měsíc / rok

  3. Optimalizace dotazu:max() v poddotazu

  4. Jak přidám hlas do své databáze ve formuláři?