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

SQL Server — indeks na kolumnie wyliczanej?

Zakładając, że masz pola w tym formacie:

00Data0007
000000Data0011
0000Data0015

, możesz wykonać następujące czynności:

  • Utwórz kolumnę wyliczaną:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

    Spowoduje to przekształcenie Twoich kolumn w następujące:

    ataD00
    ataD000000
    ataD0000
    
  • Utwórz indeks w tej kolumnie

  • Wydaj to zapytanie, aby wyszukać ciąg Data :

    SELECT  *
    FROM    mytable
    WHERE   ndata LIKE N'ataD%'
            AND SUBSTRING(ndata, LEN(N'ataD') + 1, LEN(ndata)) = REPLICATE('0', LEN(ndata) - LEN('ataD'))
    

    Pierwszy warunek użyje indeksu do filtrowania zgrubnego.

    Drugi upewni się, że wszystkie wiodące znaki (które stały się końcowymi znakami w wyliczonej kolumnie) są tylko zerami.

Zobacz ten wpis na moim blogu, aby uzyskać szczegółowe informacje na temat wydajności:

Aktualizacja

Jeśli potrzebujesz tylko indeksu SUBSTRING bez zmiany schematu, tworzenie widoku jest opcją.

CREATE VIEW v_substring75
WITH SCHEMABINDING
AS
SELECT  s.id, s.data, SUBSTRING(data, 7, 5) AS substring75
FROM    mytable

CREATE UNIQUE CLUSTERED INDEX UX_substring75_substring_id ON (substring75, id)

SELECT  id, data
FROM    v_substring75
WHERE   substring75 = '12345'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - kopiuj procedury składowane z jednej bazy danych do drugiej

  2. Jaki jest dobry pomysł na zapisywanie danych czatu w bazie danych?

  3. Wykonywanie różnych podejść do danych opartych na czasie

  4. Doświadczenie, kiedy używać OPTYMALIZUJ NA NIEZNANE

  5. Punkty kontrolne bazy danych w SQL Server