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

SQL Server - index na vypočítaném sloupci?

Za předpokladu, že máte pole v tomto formátu:

00Data0007
000000Data0011
0000Data0015

, můžete provést následující:

  • Vytvořte vypočítaný sloupec:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

    Tím se vaše sloupce převedou na následující:

    ataD00
    ataD000000
    ataD0000
    
  • Vytvořte v tomto sloupci index

  • Vydáním tohoto dotazu vyhledáte řetězec Data :

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

    První podmínka bude používat index pro hrubé filtrování.

    Druhý zajistí, že všechny úvodní znaky (které se staly koncovými znaky ve vypočítaném sloupci) nejsou nic jiného než nuly.

Podrobnosti o výkonu naleznete v tomto příspěvku na mém blogu:

Aktualizovat

Pokud chcete pouze index na SUBSTRING aniž byste změnili schéma, je možné vytvořit pohled.

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. SQL Data Manipulation Language

  2. Jak používat Spring StandardPasswordEncode a Get Salt Generate?

  3. Jak nastavit časový limit pro uloženou proceduru v SQL Server

  4. Formátování čísel pomocí odsazení úvodními nulami v SQL Server