Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server - индекс на изчислена колона?

Ако приемем, че имате вашите полета в този формат:

00Data0007
000000Data0011
0000Data0015

, можете да направите следното:

  • Създайте изчислена колона:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

    Това ще трансформира вашите колони в следното:

    ataD00
    ataD000000
    ataD0000
    
  • Създайте индекс на тази колона

  • Издайте тази заявка, за да търсите низа Data :

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

    Първото условие ще използва индекс за грубо филтриране.

    Вторият ще се увери, че всички водещи знаци (които са станали завършващи знаци в изчислената колона) не са нищо друго освен нули.

Вижте този запис в моя блог за подробности за ефективността:

Актуализация

Ако просто искате индекс на SUBSTRING без да променяте вашата схема, създаването на изглед е опция.

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. Препоръчителни процесори Intel за SQL Server 2014 – март 2015 г

  2. Начини за проследяване на изтрита база данни в SQL Server

  3. Как първо да промените/зададете сортиране в EF Code

  4. Изберете най-новата група записи по потребителско име в SQL Server 2008

  5. Колоната DateAdd причини препълване